因此,下面"模式"中包含的这个正则表达式只能与我在下面的注释中所说的相匹配(最基本的匹配是1个字母后跟一个点,然后是两个字母)
var link = "Help"
// matches www-data.it -- needs at least (1 letter + '.' + 2 letters )
var pattern = '((xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}';
var re2 = new RegExp('^' + pattern, 'i');
// if no http and there is something.something
if (link.search(re2) == 0)
{
link = link;
}
Run Code Online (Sandbox Code Playgroud)
当我测试这段代码@ http://regexpal.com/它只能起作用.有些东西通过了.
当我在JSFiddle上测试它并在生产中它匹配得比它应该更多,例如"帮助"匹配. http://jsfiddle.net/2jU4D/
这是怎么回事?
您应该使用本机正则表达式语法构造正则表达式:
var re2 = /^((xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}/i;
Run Code Online (Sandbox Code Playgroud)
特别是,\.正则表达式.在您调用时看起来很简单new RegExp().字符串语法也使用反斜杠进行引用,因此当表达式首次被解析为字符串时,反斜杠将被"吃掉".
或者:
var pattern = '((xn--)?[a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,}';
var re2 = new RegExp('^' + pattern, 'i');
Run Code Online (Sandbox Code Playgroud)
加倍反斜杠将为您提供传递给RegExp构造函数的正确字符串.