Javascript 正则表达式非贪婪搜索引号

Javascript regexp non greedy search for quotes

我有以下文字:

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

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

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

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

问题是,为什么它在没有 | 之后(如正则表达式中指定的那样)从 setLocale 吃掉 '

也许这就是您要找的:

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

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

它会查找单引号或双引号后跟 | l10n 和可选空格的任何内容。

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

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

如果需要允许双引号用单引号括起来或者单引号用双引号括起来,可以试试下面的方法:

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

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