我是正则表达式的初学者。虽然我使用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/
答案 0 :(得分:3)
您的问题是由使用g
修饰符引起的。
禁用使用捕获组。
所以你需要:
g
[1]
索引它返回2个值,因为:
0
是整个正则表达式捕获的总匹配数1..N
匹配在您的情况下,只能获得一场比赛:
(?<=\[ls]).*?(?=\[\/ls])
与正则表达式相比存在重大差异:
重要:正如下面的评论中所指出的那样,建议的解决方案不适用于JS,因为其正则表达式实现不支持 lookbehind断言。