js - match() 未正确返回值

js - match() not returning value correctly

本文关键字:返回值 match js      更新时间:2023-09-26

我是正则表达式的初学者。虽然我用 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]索引

它返回 2 个值,因为:

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

在您的情况下,只能获得一个匹配项:

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

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

  1. 中间部分没有专门的捕获组(因为我们不想要它)
  2. 前断言和后断言
  3. 被替换为特殊的正则表达式断言语法,该语法表示"文本前面"和"文本后跟"。从他们的名字来看,他们只断言一些约束,但不形成新的匹配。

重要提示:正如下面的评论中所指出的,建议的解决方案不适用于 JS,因为它的正则表达式实现不支持后瞻断言。