JavaScript拒绝我所有的RegEx,怎么回事?

4im*_*ble 2 javascript regex

我现在有这个,(我在这里找到了代码).

     var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
     someText.replace(exp, "<a href='$1'>$1</a>");  
Run Code Online (Sandbox Code Playgroud)

它会用someText 替换someText中的任何http:// URL<a href>

但我也要求它匹配www.没有http.我在RegEx Lib上发现了这个RegEx.

((http\://|https\://|ftp\://)|(www.))+(([a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(/[a-zA-Z0-9%:/-_\?\.'~]*)?
Run Code Online (Sandbox Code Playgroud)

我在RegEx检查站点上进行了测试,http: //www.nvcc.edu/home/drodgers/ceu/resources/test_regexp.asp

它匹配我想要的字符串.但当我把它放入我的exp var时,JavaScript正在爆炸并导致错误.

我甚至尝试将其作为新的RegExp进行新的修改.

var exp = new RegExp(((http\://|https\://|ftp\://)|(www.))+(([a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(/[a-zA-Z0-9%:/-_\?\.'~]*)?);
Run Code Online (Sandbox Code Playgroud)

但同样的事情发生了.

我有什么想法吗?

谢谢,Kohan

Dav*_*ing 6

我相信RegExp构造函数接受一个字符串作为参数,请参见此处:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/RegExp

所以只需在正则表达式周围添加引号,它应该可以正常工作.

var exp = new RegExp("((http\\://|https\\://|ftp\\://)|(www.))+(([a-zA-Z0-9\\.-]+\\.[a-zA-Z]{2,4})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(/[a-zA-Z0-9%:/-_\\?\\.'~]*)?");
someText.replace(exp, "<a href='$1'>$1</a>");
Run Code Online (Sandbox Code Playgroud)

  • 他还需要通过逃避逃脱角色来"双重逃脱".例如,无论你在哪里看到`\ .`,你实际上都需要`\\.`. (2认同)