gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 04:19:44 24 4
gpt4 key购买 nike

我需要找到一个用双引号括起来的子串,例如像"test", "te\"st" or "",但不是 """ 也不是 "\"。要做到这一点,下面是最好的方法

1) /".*"/g
2) /"[^"\\]*(?:\\[\S\s][^"\\]*)*"/g
3) /"(?:\\?[\S\s])*?"/g
4) /"([^"\\]*("|\\[\S\s]))+/g

昨天面试的时候被问到这个问题,想知道答案以备日后引用。

最佳答案

这些表达式的计算如下:

表达式 1 匹配:

  • 一个引号
  • 贪婪任何字符,包括倒逗号或斜杠
  • 最后一个引号。

这会匹配“test”一些错误的文本“text”,因此失败

表达式 2 匹配:

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

因此,这会收集成组的引号内的所有字符,并用斜线分隔。如果它前面有斜杠,它会通过将其包含在任何后续集合中来明确排除引号。这会起作用。

表达式 3 匹配:

  • 一个引号
  • 尽可能少的套装:
    • 前面有可选斜杠的任何一个字符
  • 最后一个引号

这会收集所有字符,可选地以斜线开头,但不是贪婪的。这会起作用

表达式 4 匹配:

  • 一个引号
  • 贪婪地找出既不是反逗号也不是斜杠的所有字符
  • 以下一项或多项:
    • 一个引号或
    • 一个斜线和任何字符

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

结论:

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

关于javascript - JS正则表达式查找被双引号包围的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15403895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com