【问题标题】:Capture everything with double quotes (optional) Regex javascript使用双引号捕获所有内容(可选)正则表达式 javascript
【发布时间】:2015-12-03 10:09:42
【问题描述】:

我现在有这个正则表达式:

file:\s?['"](.*?)['"]

对于这个字符串:

file: "word.124-ew/ef/?s=sf"

输出是:

file: word.124-ew/ef/?s=sf

但我还想捕获一个没有双引号的组(可选)。例如,这个:

file: word.124-ew/ef/?s=sf

没有双引号,但也可以有(可选)。

我尝试制作这个正则表达式,但没有得到想要的结果:

file:\s?['"]?(.*)['"]?

输出是:

word.124-ew/ef/?s=sf

包含最后的双引号,这不是我所期望的(不捕获双引号)。

现在使用我制作的最后一个正则表达式,再次添加双引号时出现问题。输出是:

file: word.124-ew/ef/?s=sf"

测试:

http://regexr.com/

正则表达式:file:\s?['"]?(.*)['"]?

字符串1:file: "word.124-ew/ef/?s=sf"

字符串2:file: word.124-ew/ef/?s=sf

失败:file: word.124-ew/ef/?s=sf"(捕获最后的双引号,我不想捕获双引号)

有什么解决办法吗?如果你们能帮我一把,我会很高兴的! 谢谢

【问题讨论】:

标签: javascript regex


【解决方案1】:

您可以使用以下正则表达式:

file:\s*['"]?([^'"]+)

查看regex demo(请注意,添加\n 仅用于演示目的)

我使用\s*匹配0个或多个空格(如果超过1个,它将全部匹配),添加?量词使['"]可选,并将惰性点匹配子模式变成否定字符类 ([^'"]+) 匹配除 '" 之外的 1 个或多个字符。

【讨论】:

  • 正则表达式中的实际问题是依赖于点匹配。惰性点匹配需要一个尾随边界,否则.*? 将永远不会匹配任何内容。贪心点匹配匹配太多。所以,任何限制都很好,在这种情况下,否定字符类是最好的。
猜你喜欢
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
相关资源
最近更新 更多