我是正则表达式的初学者。虽然我用了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
修饰符引起的。
它禁用捕获组的使用。
所以你需要:
- 删除
g
- 改为访问
[1]
索引
它返回 2 个值,因为:
- 索引值
0
是整个正则表达式捕获的总匹配 1..N
每个捕获组匹配
在您的情况下,可能只能获得一场比赛:
(?<=\[ls]).*?(?=\[\/ls])
与正则表达式相比的主要区别:
- 中间部分没有专用的捕获组(因为我们不需要它)
- 前置和后置断言被替换为特殊的正则表达式断言语法,这意味着“前面的文本”和“后面的文本”。正如其名称所示,它们仅断言某些约束,但不形成新的匹配。
重要:正如下面的评论中所指出的,提议的解决方案不适用于 JS,因为其正则表达式实现不支持后向断言。
关于javascript - js - match() 未正确返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27981958/