Javascript正则表达式:精确匹配重复字符两次(如果匹配3次则忽略)
我正在解析具有两种类型分隔符(类似于mustache模板)的标记的字符串 我需要一个纯reg ex解决方案,它与Javascript正则表达式:精确匹配重复字符两次(如果匹配3次则忽略),javascript,regex,Javascript,Regex,我正在解析具有两种类型分隔符(类似于mustache模板)的标记的字符串 我需要一个纯reg ex解决方案,它与中的{{bob}}匹配,这是一个{{bob}}双令牌。但在中不匹配这是{{{{bob}}三重令牌 我要把双人床和 \{\{[^\{]([\s\S]+?)[^\}]\}\} 但是,它匹配三元组{{{bob}}中的{{{bob}}} 没有负面的看法,我正在努力寻找一个纯粹的正则表达式解决方案。有指针吗?您可以搜索括号外的任何空格字符,如下所示: \s(\{([^\{}]+?)\})\sR
中的{{bob}}
匹配,这是一个{{bob}}双令牌
。但在中不匹配这是{{{{bob}}三重令牌
我要把双人床和
\{\{[^\{]([\s\S]+?)[^\}]\}\}
但是,它匹配三元组{{{bob}}
中的{{{bob}}}
没有负面的看法,我正在努力寻找一个纯粹的正则表达式解决方案。有指针吗?您可以搜索括号外的任何空格字符,如下所示:
\s(\{([^\{}]+?)\})\s
RegEx:
^(\}?\{[^\{]([\s\s]+?)[^\}]\}
自动生成的解释:
^断言字符串开头的位置
第一捕获组(\}?)
\}? 按字面匹配字符}(区分大小写)
? 量词-匹配0到1次,尽可能多次,根据需要返回(贪婪)
\{与字符{按字面意思匹配(区分大小写)
\{与字符{按字面意思匹配(区分大小写)
匹配以下列表中不存在的单个字符[^\{]
\{与字符{按字面意思匹配(区分大小写)
第二个捕获组([\s\s]+?)
是否匹配以下列表中的单个字符[\s\s]+?
+?量词-一次和无限次之间的匹配,尽可能少的匹配,根据需要扩展(惰性)
\s匹配任何空白字符(等于[\r\n\t\f\v])
\S匹配任何非空白字符(等于[^\r\n\t\f])
匹配以下列表中不存在的单个字符[^\}]
\}按字面匹配字符}(区分大小写)
\}按字面匹配字符}(区分大小写)
\}按字面匹配字符}(区分大小写)
全局模式标志
g修饰语:全局。所有匹配项(第一次匹配后不返回)
您可以使用以下方法提取匹配项:
var s=“这是{{{bad-bob-triple}}}一个三重令牌{{bob-double}}{{bob-double}}}一个双令牌{{{{bad-token}}{{bad-token}}}”;
var rx=/(?:^[^{]){{([^{}]*)}(?!})/g;
var m,res=[];
while(m=rx.exec){
res.push(m[1]);
}
控制台日志(res)你想用什么东西来代替{{bob}
?应该为{{{bob}}
和{{{bob}}}
输出什么?是的,它们将被替换为字符串。但是我不能在不无意中匹配三元组的情况下匹配double。(?为什么不能使用lookahead/behind?@MarcoLuzzara差不多了,但它仍然匹配三元组中的双括号,我如何排除它,所以它只匹配double?