JS正则表达式查找由双引号括起来的子字符串

时间:2013-03-14 07:56:50

标签: javascript

我需要找到一个被双引号括起来的子字符串,例如"test""te\"st""",但"""不是“\”。要实现这一点,这是以下

中最好的方法
1) /".*"/g
2) /"[^"\\]*(?:\\[\S\s][^"\\]*)*"/g
3) /"(?:\\?[\S\s])*?"/g
4) /"([^"\\]*("|\\[\S\s]))+/g

我在昨天的一次采访中被问到这个问题,并想知道答案以供将来参考。

3 个答案:

答案 0 :(得分:2)

这些表达式评估如下:

表达式1匹配:

  • 一个倒置的逗号
  • 贪婪任何角色,包括倒置的逗号或斜线
  • 最后一个倒置的逗号。

这将匹配"test" some wrong text "text",因此失败

表达式2匹配:

  • 一个倒置的逗号
  • 贪婪地使用不是倒置逗号或斜杠的字符
  • 贪得无厌
    • 任何以斜线开头的字符
    • 贪婪地使用不是倒置逗号或斜杠的字符
  • 最后倒置的逗号

因此,这会收集集合中的引号中的所有字符,由斜杠分隔。它特别排除了一个倒置的逗号,如果它之前是斜杠,则将其包含在任何后续集合中。这将有效。

表达式3匹配:

  • 一个倒置的逗号
  • 只有少数适​​合:
    • 任意一个以可选斜杠开头的字符
  • 最后倒置的逗号

这会收集所有字符,可选地以斜杠开头,但不是贪婪的。这将有效

表达式4匹配:

  • 一个倒置的逗号
  • 贪婪地所有不是倒置逗号或斜线的字符
  • 以下一项或多项:
    • 一个倒置的逗号或
    • 斜线和任何角色

这将匹配"test"\x,因此失败

<强>结论:

据我所知,表达式2和3都可以使用。我可能已经遗漏了一些东西,但对于给出的例子,两者肯定会起作用(或者不合适)。那么问题就是哪个更好。我投三票,因为它更简单。

答案 1 :(得分:0)

你的语法有点不清楚。我假设您想要找到DQ形式的所有字符串[DQ或\ DQ除外] * DQ。

/"([^"\\\\]|\\\\"|\\\\[^"])*"/g

的正则表达式

答案 2 :(得分:0)

你也可以逃脱这个更简单的人:

/("(\\"|[^"])+")/g

http://jsfiddle.net/b9chris/eMN2S/