javascript - js - match() 未正确返回值

标签 javascript regex

我是正则表达式的初学者。虽然我用了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. 前置和后置断言被替换为特殊的正则表达式断言语法,这意味着“前面的文本”和“后面的文本”。正如其名称所示,它们仅断言某些约束,但不形成新的匹配。

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

关于javascript - js - match() 未正确返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27981958/

相关文章:

javascript - 使用正则表达式捕获组一定次数,但最后一组有剩余值

javascript - three.js 在鼠标向下旋转对象并移动

javascript - 在 AngularJS 中缓存国际化 JSON 数据

javascript - 如何在一个 Canvas 上控制多个视频

javascript - 更改为正则表达式

javascript - 使用正则表达式进行多输入验证

javascript - 在 Google 脚本中访问电子表格

javascript - 在没有 Promise 或任何 JS 库的情况下延迟函数执行

javascript - 正则表达式不起作用

ios - swift中使用正则表达式检查十进制输入