我试图在一个语句中从字符串中首次出现正则表达式模式,以使我的代码看起来更清晰。这就是我想要做的事情:
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的暂存器中执行。
感谢您的关注。
答案 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 标志?