正则表达式:无法找到正确的表达方式

时间:2016-08-22 16:24:56

标签: javascript regex

我需要找到字符串的所有匹配项:

{{ <text | default('<text or empty space>') }}

所以{{|默认(&#39;&#39;)}}始终存在,例如:

{{ text1 | default('default for text1 value') }} 

我需要在同一行中匹配许多这些模式。我正在尝试(参见here

[\{]{2} (.*) [|]{1} default(.*) [\}]{2}

但它没有得到正确的匹配(只有一个用于2个表达式)。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

请注意.*部分是贪婪的,并且尽可能多地匹配符号。您可以使用惰性版本.*?,但还需要g全局修饰符才能使正则表达式引擎多次匹配。另外,我建议使用正则表达式文字表示法,因为正则表达式是静态的,而不是根据变量构建的。

var reg = /\{{2} (.*?) \| default(.*?) \}{2}/g;

请参阅regex demo

var reg = /\{{2} (.*?) \| default(.*?) \}{2}/g;

var text = "{{ text1 | default('text1 default') }} {{ text2 | default('text2 default') }}"

console.log(text.match(reg)); 

注意:循环中需要RegExp#exec才能获取所有捕获的文本。

另一个注意事项:如果您的输入可能在您需要的文字之前有{{ text}}.*?将会贪婪地行动。您需要使用.*?驯化的贪婪令牌替换所有(?:(?!\}{2}).)*。请参阅this demo