js - match() 没有正确返回值

js - match() not returning value correctly

我是正则表达式的初学者。虽然我使用 https://www.regex101.com/r/nD8qB4/2 检查我的正则表达式,但 match() 没有返回我想要的值。

js:

"[ls]Something[/ls]".match(/\[ls\](.*?)\[\/ls\]/g)[0];

输出:

[ls]Something[/ls]

我想要的:

Something

我的问题在哪里?这是一个 jsfiddle:http://jsfiddle.net/6b7a2z8d/

您的问题是由使用 g 修饰符引起的。

它禁用捕获组。

所以你需要:

  1. 移除g
  2. 改为访问 [1] 索引

它 returns 2 个值,因为:

  • 索引值0是整个正则表达式捕获的总匹配
  • 1..N 每个捕获组的匹配项

在你的情况下,可能只有一个匹配项:

(?<=\[ls]).*?(?=\[\/ls])

与您的正则表达式相比的主要区别:

  1. 中间部分没有专门的捕获组(因为我们不需要)
  2. Pre- 和 post- 断言被替换为特殊的正则表达式断言语法,这意味着 "text preceded by" 和 "text followed by"。从他们的名字可以看出,他们只断言一些约束但不形成新的匹配。

重要:正如在下面的评论中指出的那样,建议的解决方案不适用于 JS,因为它的正则表达式实现 不支持 回顾断言。