JavaScript中的正则表达式与PHP中的正则表达式不同

Chr*_*ris 2 javascript php regex

我有一个正则表达式来匹配用户名(在PHP中使用的函数preg_match):

/[a-z]+(?(?=\-)[a-z]+|)\.[1-9][0-9]*/
Run Code Online (Sandbox Code Playgroud)

此模式匹配的形式的用户名abc.124,abc-abc.123

但是,当我把它带到JavaScript:

var re = new RegExp("/[a-z]+(?(?=\-)[a-z]+|)\.[1-9][0-9]*/"); 
Run Code Online (Sandbox Code Playgroud)

我收到语法错误:

SyntaxError: Invalid regular expression: /[a-z]+(?(?=-)[a-z]+|).[1-9][0-9]*/: Invalid group
Run Code Online (Sandbox Code Playgroud)

(?(?=\-)[a-z]+|)是说,如果以后[a-z]+我们看到了-那么断言[a-z]+是后否则,比赛什么都没有.这在PHP中都很有用,但是我对JavaScript的不同之处是什么?

编辑:我很感谢评论,现在我有一个关于这个的最后一个问题:

    var str="accouts pending removal shen.1206";
    var patt= new RegExp("/[a-z]+(?:-[a-z]+)?\.[1-9][0-9]*/"); 
    var result=patt.exec(str);
    alert(result); 
Run Code Online (Sandbox Code Playgroud)

这个警报出现了null吗?但如果我做以下工作,它的工作原理:

var patt=/[a-z]+(?:-[a-z]+)?\.[1-9][0-9]*/;
var result=patt.exec(str);
alert(result); 
Run Code Online (Sandbox Code Playgroud)

为什么"新的RegExp()"不起作用?

Dan*_*uis 5

不同的正则表达引擎支持不同的功能 条件语句不支持的的JavaScript.

无论如何,您的模式不需要条件.我会简化你的表达/[a-z]+(?:-[a-z]+)?\.[1-9][0-9]*/,这更容易理解,并将在PHP的PCRE和Javascript中工作.