我需要找到一个被双引号括起来的子字符串,例如"test"
,"te\"st"
或""
,但"""
不是“\”。要实现这一点,这是以下
1) /".*"/g
2) /"[^"\\]*(?:\\[\S\s][^"\\]*)*"/g
3) /"(?:\\?[\S\s])*?"/g
4) /"([^"\\]*("|\\[\S\s]))+/g
我在昨天的一次采访中被问到这个问题,并想知道答案以供将来参考。
答案 0 :(得分:2)
这些表达式评估如下:
表达式1匹配:
这将匹配"test" some wrong text "text"
,因此失败
表达式2匹配:
因此,这会收集集合中的引号中的所有字符,由斜杠分隔。它特别排除了一个倒置的逗号,如果它之前是斜杠,则将其包含在任何后续集合中。这将有效。
表达式3匹配:
这会收集所有字符,可选地以斜杠开头,但不是贪婪的。这将有效
表达式4匹配:
这将匹配"test"\x
,因此失败
<强>结论:强>
据我所知,表达式2和3都可以使用。我可能已经遗漏了一些东西,但对于给出的例子,两者肯定会起作用(或者不合适)。那么问题就是哪个更好。我投三票,因为它更简单。
答案 1 :(得分:0)
你的语法有点不清楚。我假设您想要找到DQ形式的所有字符串[DQ或\ DQ除外] * DQ。
此/"([^"\\\\]|\\\\"|\\\\[^"])*"/g
答案 2 :(得分:0)