Javascript正则表达式用于在文本中找到引号,而不是括号括号,而不是括号

时间:2017-09-01 12:49:55

标签: javascript regex

背景

我需要用双引号替换简单的引号,但在打开和关闭括号之前只需要替换哪些引号。我开发了一个节点脚本,将java i18n属性文件转换为更容易用于翻译器的Excel文件。该脚本可以将属性文件转换为xlsx文件,然后将xlsx文件转换为属性文件。 java项目资源中的引号必须加倍(关于MessageSource文档),但我不想要求翻译人员直接在Excel工作表中加倍。

问题

我在创建一个javascript正则表达式时遇到一些困难,找不到括号之前的简单引号,而且后面没有括号。

例如,我有这样的文字:

  

John的车有'{value}'轮子。

正则表达式只应返回第一个引号,而不是后面两个引号。

我在Javascript中需要这个正则表达式,问题是我不能使用“lookbehind”运算符,因为它不受支持。

我试过了:

(?!\})'(?!\{)

但它继续捕获“}'”。

3 个答案:

答案 0 :(得分:0)

为什么不简单:

[^{}]'[^{}]|[^{}]'$|^'[^{}]

test

答案 1 :(得分:0)

如果你的例子是相关的,你可以用

来做
\b'\b



var str = "The John's car has '{value}' wheels.";

document.write("Should only be one: " + str.match(/\b'\b/g));
document.write("<br/>Should be all: " + str.match(/'/g));
&#13;
&#13;
&#13;

它使用\b(匹配字边界)使其仅匹配'边界字符。

Better illustrated here at regex101

答案 2 :(得分:0)

您似乎只需匹配以'{开头的任何子字符串,然后使用除括号之外的任何字符并以}'结尾并跳过这些匹配,并在任何其他字符中匹配'要替换为"的上下文。

replace内使用回调

var s = "The John's car '  has '{value}' wheels.";
s = s.replace(/('{[^{}]*}')|'/g, function($0,$1) { return $1?$1:'"';});
console.log(s);

<强>详情

  • ('{[^{}]*}') - 第1组(在回调中引用$1):'{...}'子字符串:
    • '{ - '{子字符串
    • [^{}]* - {}以外的任何0 +字符
    • }' - }'子字符串
  • | - 或
  • ' - 任何其他背景下的单引号

在回调中,$0是一个包含整个匹配的变量,$1引用捕获到第1组的值。