((xn - )?[a-z0-9] +( - [a-z0-9] +)*\.)+ [az] {2,}适用于regexpal.com,但不适用于jsfiddle.net

fun*_*eah 1 javascript regex

因此,下面"模式"中包含的这个正则表达式只能与我在下面的注释中所说的相匹配(最基本的匹配是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/

这是怎么回事?

Poi*_*nty 5

您应该使用本机正则表达式语法构造正则表达式:

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构造函数的正确字符串.