JS正则表达式查找被双引号包围的子字符串

JS regular expression to find a substring surrounded by double quotes

本文关键字:包围 字符串 正则表达式 查找 JS      更新时间:2023-09-26

我需要找到由双引号包围的子字符串,例如,像"test", "te'"st""",但不是"""也不是"'"。要实现这一点,最好的方法是在下面的

中进行操作
1) /".*"/g
2) /"[^"'']*(?:''['S's][^"'']*)*"/g
3) /"(?:''?['S's])*?"/g
4) /"([^"'']*("|''['S's]))+/g

昨天我在面试中被问到这个问题,我想知道答案,以便将来参考。

这些表达式的求值方式如下:

表达式1匹配

  • 逗号
  • 任意字符,包括反逗号或斜杠
  • 最后一个倒逗号。

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

表达式2匹配:

  • 逗号
  • 尽可能多的字符,既不是反逗号也不是斜杠
  • 贪心如多套
    • 任何以斜杠开头的字符
    • 尽可能多的字符,既不是反逗号也不是斜杠
  • 最后一个逗号

因此,这将收集集合中以反逗号分隔的所有字符。如果倒置逗号前面有斜杠,则在任何后续集合中包含它,从而明确排除它。

表达式3匹配:

  • 逗号
  • 尽可能少的集合:
    • 任意一个字符前带可选斜杠
  • 最后一个逗号

收集所有字符,可选地在前面加一个斜杠,但不是贪婪的。

表达式4匹配:

  • 逗号
  • 所有不是反逗号或斜杠的字符
  • 一个或多个:
    • 逗号或
    • 斜杠和任意字符

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

结论:

据我所知,表达式2和3都可以工作。我可能遗漏了一些东西,但对于给出的示例,两者都肯定可以工作(或不合适)。那么问题来了,哪个更好。我会选三个,因为这样更简单。

你也可以用这个更简单的家伙:

/("(''"|[^"])+")/g
http://jsfiddle.net/b9chris/eMN2S/

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

这个/"([^"'''']|''''"|''''[^"])*"/g的正则表达式