在javascript中使用正则表达式非常奇怪的结果

时间:2012-05-08 18:00:32

标签: javascript regex

我在正则表达方面不是很好但是有一种不合逻辑的事情正在发生:
我使用这个小提琴验证了正则表达式的语法:http://jsfiddle.net/BcQfQ/2/然后将\d替换为另一个正则表达式以检查此处的网址: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");

如何在代码中编写正则表达式以使其有效?

1 个答案:

答案 0 :(得分: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`!()\[\]{};:'".,<>?«»“”‘’]))/;