背景
我需要用双引号替换简单的引号,但在打开和关闭括号之前只需要替换哪些引号。我开发了一个节点脚本,将java i18n属性文件转换为更容易用于翻译器的Excel文件。该脚本可以将属性文件转换为xlsx文件,然后将xlsx文件转换为属性文件。 java项目资源中的引号必须加倍(关于MessageSource文档),但我不想要求翻译人员直接在Excel工作表中加倍。
问题
我在创建一个javascript正则表达式时遇到一些困难,找不到括号之前的简单引号,而且后面没有括号。
例如,我有这样的文字:
John的车有'{value}'轮子。
正则表达式只应返回第一个引号,而不是后面两个引号。
我在Javascript中需要这个正则表达式,问题是我不能使用“lookbehind”运算符,因为它不受支持。
我试过了:
(?!\})'(?!\{)
但它继续捕获“}'”。
答案 0 :(得分:0)
答案 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;
它使用\b
(匹配字边界)使其仅匹配'
边界字符。
答案 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组的值。