【发布时间】:2016-04-09 16:02:52
【问题描述】:
我有这样的网址domain.com/news-343dds-this-is-test
我要提取新闻id343dds,
所以我尝试使用正则表达式
这是我使用的正则表达式/news-(.+)-/
但结果是这样的343dds-this-is。我只想得到343dds。
【问题讨论】:
标签: javascript regex
我有这样的网址domain.com/news-343dds-this-is-test
我要提取新闻id343dds,
所以我尝试使用正则表达式
这是我使用的正则表达式/news-(.+)-/
但结果是这样的343dds-this-is。我只想得到343dds。
【问题讨论】:
标签: javascript regex
(.+) 是贪婪的并匹配输入的其余部分。将其更改为(.+?) 使其不贪心。
【讨论】:
Jeremy Hanlon 的解决方案显然有效,但不是最推荐的解决方案。
你最好使用([^-]+)。
即使在像这个 SO question 这样的简单情况下可能无关紧要,惰性量词 +? 也有不便之处,即步数与搜索部分的大小成正比,因此它可能会广泛影响性能.
这个解释清楚了here。
例子:
(.+?) needs 22 steps 用于给定的343dds 键(.+?) needs 68 steps 用于更长的密钥,例如 thisIsASignificativelyLongKey
([^-]+)needs 12 steps 仅适用于任意键【讨论】:
(.+?)):1)引擎发现“news-”之后的第一个字符匹配.+,但第二个不匹配-(这是一步); 2)然后返回,发现第一个和第二个字符匹配.+但3d不匹配-(这是一步); 3)然后它会返回......依此类推,直到创建第 1 到第 n 个字符匹配 .+ 和 n+1th 匹配 -。所以它需要与搜索到的字符串部分的大小一样多的步骤!