我有以下文字:
<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中吃|
?
答案 0 :(得分:2)
也许这就是你要找的东西:
(['"])([^'"]*)\1\s*\|\s*l10n
https://regex101.com/r/lV8wV7/1
它在单引号或双引号中查找任何内容,后跟带有可选空格的| l10n
。
您的正则表达式匹配单引号或双引号,后跟任何字符,非贪婪,然后是另一个匹配的引号。但是,它能够非贪婪地匹配封闭的引号(所以不仅仅是它遇到的最后一个令人满意的引用),而不会违反其余的模式。
上述模式的主要区别在于它不允许包含引号。
如果您需要允许用单引号括起来的双引号或双引号中的单引号,您可以尝试以下操作:
(?:(')([^']*)'|(")([^"]*)")\s*\|\s*l10n