我需要找到字符串的所有匹配项,例如:
{{ <text | default('<text or empty space>') }}
所以一个模式,其中 {{ | default('') }} 始终存在,例如:
{{ text1 | default('default for text1 value') }}
我需要在同一行中匹配许多这些模式。我正在尝试(请参阅 here )
[\{]{2} (.*) [|]{1} default(.*) [\}]{2}
但它没有得到正确的匹配(只有一个匹配 2 个表达式)。有什么帮助吗?
最佳答案
请注意,.*
部分是贪婪的,会匹配尽可能多的符号。您可以使用惰性版本 .*?
,但也需要一个 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}).)*
缓和的贪婪 token 。请参阅this demo .
关于javascript - 正则表达式 : can't find right expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084412/