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
修饰符引起的。
它禁用捕获组。
所以你需要:
- 移除
g
- 改为访问
[1]
索引
它 returns 2 个值,因为:
- 索引值
0
是整个正则表达式捕获的总匹配
1..N
每个捕获组的匹配项
在你的情况下,可能只有一个匹配项:
(?<=\[ls]).*?(?=\[\/ls])
与您的正则表达式相比的主要区别:
- 中间部分没有专门的捕获组(因为我们不需要)
- Pre- 和 post- 断言被替换为特殊的正则表达式断言语法,这意味着 "text preceded by" 和 "text followed by"。从他们的名字可以看出,他们只断言一些约束但不形成新的匹配。
重要:正如在下面的评论中指出的那样,建议的解决方案不适用于 JS,因为它的正则表达式实现 不支持 回顾断言。
我是正则表达式的初学者。虽然我使用 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]
索引
它 returns 2 个值,因为:
- 索引值
0
是整个正则表达式捕获的总匹配 1..N
每个捕获组的匹配项
在你的情况下,可能只有一个匹配项:
(?<=\[ls]).*?(?=\[\/ls])
与您的正则表达式相比的主要区别:
- 中间部分没有专门的捕获组(因为我们不需要)
- Pre- 和 post- 断言被替换为特殊的正则表达式断言语法,这意味着 "text preceded by" 和 "text followed by"。从他们的名字可以看出,他们只断言一些约束但不形成新的匹配。
重要:正如在下面的评论中指出的那样,建议的解决方案不适用于 JS,因为它的正则表达式实现 不支持 回顾断言。