JavaScript中使用正则表达式得到非常奇怪的结果

3
我不是很擅长正则表达式,但这里有一个不合逻辑的问题:
我使用了这个 fiddle 来验证正则表达式的语法: http://jsfiddle.net/BcQfQ/2/,然后将 \d 替换为另一个正则表达式,以检查来自此处的 URL :http://daringfireball.net/2010/07/improved_regex_for_matching_urls ,但它无法正常工作: http://jsfiddle.net/bNHQs/2/。最奇怪的是,当您复制正则表达式并将其粘贴到文本框中(然后在代码中写入 textbox.value),一切都正常:http://jsfiddle.net/6uAQG/2/

不起作用的正则表达式代码:

var reg=/\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/;
var str="2";
if(str.match(reg))alert("test:true");
else alert("test:false");

如何在代码中编写正则表达式以使其正常工作?


2
请在此处发布相关代码(感谢JSFiddle) - Andrew Whitaker
1个回答

5

您需要使用反斜杠转义定界符("/")。定界符标记表达式的开始和结束。只有在使用反斜杠转义它时,才能使用斜杠。以下表达式应该可以正常工作:

var reg=/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/;

3
当您在文本框中使用文本时,它是一个字符串。当您使用表达式(请注意,它没有用引号括起来)时,它是一个特殊的对象。 typeof("/foo/") == "string", 但 typeof(/foo/) == "object"。并且在字符串中,您不需要转义斜杠。 - Johannes Egger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接