javascript - 正则表达式 : can't find right expression

标签 javascript regex

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

{{ <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/

相关文章:

javascript - 为什么 if(asynchronous.get()) 有效,可以这样使用吗

javascript - 如何在 JavaScript 中将正则表达式与变量一起使用?

javascript - 如何只匹配那些前面有偶数个 `%` 的数字?

java - 接受逗号分隔值的正则表达式模式

regex - 如何使用正则表达式前瞻来匹配这些模式?

javascript - 模拟点击python中的javascript链接

javascript - 我可以使用 JavaScript 检测 HTML 中播放的任何类型的视频,然后使用函数暂停所有媒体吗?

javascript - geocoder.geocode 异步调用可以同步吗?我的代码可以进行哪些更改?

javascript - 如何使用node js在前端显示modgodb中存储的图像URL路径

javascript - 从 1 到 4096 的 csv 数字的正则表达式