Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式:精确匹配重复字符两次(如果匹配3次则忽略)_Javascript_Regex - Fatal编程技术网

Javascript正则表达式:精确匹配重复字符两次(如果匹配3次则忽略)

Javascript正则表达式:精确匹配重复字符两次(如果匹配3次则忽略),javascript,regex,Javascript,Regex,我正在解析具有两种类型分隔符(类似于mustache模板)的标记的字符串 我需要一个纯reg ex解决方案,它与中的{{bob}}匹配,这是一个{{bob}}双令牌。但在中不匹配这是{{{{bob}}三重令牌 我要把双人床和 \{\{[^\{]([\s\S]+?)[^\}]\}\} 但是,它匹配三元组{{{bob}}中的{{{bob}}} 没有负面的看法,我正在努力寻找一个纯粹的正则表达式解决方案。有指针吗?您可以搜索括号外的任何空格字符,如下所示: \s(\{([^\{}]+?)\})\sR

我正在解析具有两种类型分隔符(类似于mustache模板)的标记的字符串

我需要一个纯reg ex解决方案,它与
中的
{{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?