js - match()没有正确返回值

时间:2015-01-16 10:31:02

标签: 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/

1 个答案:

答案 0 :(得分:3)

您的问题是由使用g修饰符引起的。

禁用使用捕获组。

所以你需要:

  1. 删除g
  2. 访问[1]索引
  3. 它返回2个值,因为:

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

    在您的情况下,只能获得一场比赛:

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

    与正则表达式相比存在重大差异:

    1. 中间部分没有专门的捕获组(因为我们不想要它)
    2. 断言前和断言后用特殊的正则表达式断言语法替换,这意味着&#34;文本前面带有&#34;和&#34;文本后跟&#34;。从它们的名字开始,它们只是主张一些约束,但不会形成新的比赛。
    3. 重要:正如下面的评论中所指出的那样,建议的解决方案不适用于JS,因为其正则表达式实现不支持 lookbehind断言。