正则表达式匹配双引号或单引号中的字符串,后跟空格

时间:2014-03-18 00:31:14

标签: javascript regex

我正在尝试匹配单引号或双引号之间的字符串,并且必须跟随特定文本。

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

4 个答案:

答案 0 :(得分:1)

以下正则表达式适用于您:

["']([^"']+?)['"]\s*\|\s*i18n

点击此处:

http://regex101.com/r/aI1lX4

答案 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

Regular expression visualization

Debuggex Demo

&#34; *&#34;在开头需要匹配尽可能少的字符数。对第一次捕获的反向引用是为了确保两个引号匹配。在&#34; |&#34;周围允许任意数量的空格。这是假设您要捕获的文本中没有未转义的引号。匹配结果为$ 2,因为$ 1用于维护引号。

答案 3 :(得分:0)

引号中的子字符串是否总是一个单词,如key_name?如果是这样,这应该是你所需要的:

(["'])(\w+)\1\s*\|\s*i18n\b

如果没有,这可能会让你正确:

(["'])([^'"]+)\1\s*\|\s*i18n\b

在任何一种情况下,您要查找的部分都将在第2组中捕获。如果您的需求比这更复杂,我们需要更多信息。