JavaScript匹配函数似乎停止了脚本

Rog*_*ger 2 javascript regex

昨天'Hnatt'非常友好地提供了这个脚本的正则表达式部分:

<html>
<body>
    <script type="text/javascript">
        alert("hhhhhh   yadad   example.com/check?x=asdfasdf bsss ffhhh".match(/example.com\/check\?x\=([^\s]*)/)[1]);
        alert('alert 2');
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

现在我有一个新的问题/问题/ point_of_confusion.如果我将'example.com'更改为匹配,则整个脚本将停止.我想知道一个解决方案,然后尝试/ catch,允许脚本继续前进.(虽然,我用try/catch攻击修复,插入try catch /打破更大的脚本......我不知道为什么.这就是为什么我想要一个不包含try/catch的解决方案).我还想尝试理解为什么当'match'函数找不到匹配时会发生这种拖拽.

<html>
<body>
    <script type="text/javascript">
        alert("hhhhhh   yadad   exampleTwo.com/check?x=asdfasdf bsss ffhhh".match(/example.com\/check\?x\=([^\s]*)/)[1]);
        alert('alert 2');
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是一个简化的版本.在更广泛的脚本中,我使用在大海捞针中找到的针并将其分配给变量.

小智 7

如果没有匹配项,则该.match()方法返回null.当您尝试获取索引[1]null,会出现错误,暂停脚本.你应该检查一下,例如:

var match = "hhhhhh   yadad   exampleTwo.com/check?x=asdfasdf bsss ffhhh".match(/example.com\/check\?x\=([^\s]*)/);
if (match) {
    alert(match[1]);
}
alert('alert 2');
Run Code Online (Sandbox Code Playgroud)