为什么string.match(...)[0]会抛出异常?

时间:2014-10-16 22:32:12

标签: javascript regex string match

我试图在一个语句中从字符串中首次出现正则表达式模式,以使我的代码看起来更清晰。这就是我想要做的事情:

var matchedString = somestring.match(/some regex/g)[0];

我希望这是合法的,但它会引发异常:

Exception: somestring.match(...) is null

似乎JS试图在匹配finsihed之前索引数组,因为数组确实提供了至少一个匹配,所以我不希望它为null。

我想了解它为何会发生。它可能是一个错误吗?

我的机器是运行Arch Linux x86_64的PC。代码正在firefox 32.0.3的暂存器中执行。

感谢您的关注。

2 个答案:

答案 0 :(得分:2)

如果somestring.match()找不到匹配项,则会返回null

而且,null[0]会抛出异常。

由于您收到此确切异常,因此未在内容中找到正则表达式。在这种方式下使用匹配选项上的g标志要非常小心,因为当你在正则表达式中指定了子匹配时,它并不总能达到预期效果。既然看起来你只想要第一场比赛,你应该删除g选项。


更安全的代码方式是:

var matches = somestring.match(/some regex/);
if (matches) {
    // do something here with matches[0]
}

答案 1 :(得分:0)

如果你想在一个声明中做到这一点(并且没有特别好的理由为什么这是一个好主意,请参阅jfriend000'):

var firstMatchOrFalse = /pattern/.test(somestring) && somestring.match(/pattern/)[0];

如果您只想要第一场比赛,为什么 g 标志?