我正在尝试匹配单引号或双引号之间的字符串,并且必须跟随特定文本。
input
:
<title ng-bind="'key_name' | i18n"></title>
或可以
<span class="sr-only">{{ 'key_name' | i18n }}</span>
或
<span class="sr-only">{{ "key_name" | i18n }}</span>
我想抓住key_name
这是我到目前为止所失败的。
["']([^)]+)["']\s|\si18n
答案 0 :(得分:1)
答案 1 :(得分:1)
此表达式适用于您发布的三个示例,但它们并不是非常灵活。
/(?:\{\{\s*|"\s*(?=')|'\s*(?="))((['"]).*?\2)\s\|\si18n/
// Without capturing quotes:
/(?:\{\{\s*|"\s*(?=')|'\s*(?="))(['"])(.*)?\1\s\|\si18n/
实际匹配分别位于[1]
和[2]
。您可能希望将部分\s
更改为\s*
或\s+
。
答案 2 :(得分:0)
.*(["'])([^)]*?)\1\s*?\|\s*?i18n
&#34; *&#34;在开头需要匹配尽可能少的字符数。对第一次捕获的反向引用是为了确保两个引号匹配。在&#34; |&#34;周围允许任意数量的空格。这是假设您要捕获的文本中没有未转义的引号。匹配结果为$ 2,因为$ 1用于维护引号。
答案 3 :(得分:0)
引号中的子字符串是否总是一个单词,如key_name
?如果是这样,这应该是你所需要的:
(["'])(\w+)\1\s*\|\s*i18n\b
如果没有,这可能会让你正确:
(["'])([^'"]+)\1\s*\|\s*i18n\b
在任何一种情况下,您要查找的部分都将在第2组中捕获。如果您的需求比这更复杂,我们需要更多信息。