Javascript regexp非贪婪搜索引号

时间:2015-11-24 15:23:04

标签: javascript regex regex-greedy non-greedy

我有以下文字:

<a href="{{'Čeština' | l10n}}" ng-click="setLocale('cs_CZ')">{{field.text || 'Čeština' | l10n}}</a>

正则表达式: /((?!l10n))*?(['"])(.*?)\2[\s]*?\|[\s]*?l10n/g

我正在尝试使用修改后的字符串替换l10n之前的字符串。我的正则表达式工作正常,除了这种情况,它从'函数中吃setLocale

这是带有我的表达式的交互式正则表达式测试器 - https://regex101.com/r/vX5tJ6/3

问题是,如果之后没有'(正如regexp中所指定的那样),它为什么要从setLocale中吃|

1 个答案:

答案 0 :(得分:2)

也许这就是你要找的东西:

(['"])([^'"]*)\1\s*\|\s*l10n

https://regex101.com/r/lV8wV7/1

它在单引号或双引号中查找任何内容,后跟带有可选空格的| l10n

您的正则表达式匹配单引号或双引号,后跟任何字符,非贪婪,然后是另一个匹配的引号。但是,它能够非贪婪地匹配封闭的引号(所以不仅仅是它遇到的最后一个令人满意的引用),而不会违反其余的模式。

上述模式的主要区别在于它不允许包含引号。

如果您需要允许用单引号括起来的双引号或双引号中的单引号,您可以尝试以下操作:

(?:(')([^']*)'|(")([^"]*)")\s*\|\s*l10n

https://regex101.com/r/mL8gA6/1