我需要找到一个用双引号括起来的子字符串,例如,like"test"
或"te\"st"
,""
但不是"""
“\”。为了实现这一点,这是以下最佳方式
1) /".*"/g
2) /"[^"\\]*(?:\\[\S\s][^"\\]*)*"/g
3) /"(?:\\?[\S\s])*?"/g
4) /"([^"\\]*("|\\[\S\s]))+/g
昨天在面试的时候被问到这个问题,想知道答案以备日后参考。
我需要找到一个用双引号括起来的子字符串,例如,like"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 都可以。我可能遗漏了一些东西,但对于给出的示例,两者肯定会起作用(或不合适)。那么问题来了,哪个更好。我会投票给三个,因为它更简单。
你的语法有点不清楚。我假设你想找到所有格式为 DQ [除了 DQ 或 \DQ]* DQ 的字符串。
正则表达式/"([^"\\\\]|\\\\"|\\\\[^"])*"/g