2012-05-08 27 views
3

我不是在正则表达式的很好,但有是发生了不合逻辑的事情:我验证了这个小提琴正则表达式的语法
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/用正则表达式很奇怪的结果在JavaScript

守则不工作正则表达式:

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)在这里发布相关的代码 –

回答

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

谢谢,但是为什么在文本框中它的工作原理? – user1365010

+3

当您使用文本框中的文本时,它是一个字符串。当你使用表达式时(注意它没有被引号包围),它是一个特殊的对象。 typeof(“/ foo /”)==“string”'但是'typeof(/ foo /)==“object”'。在一个字符串中,你不需要跳过斜杠。 –