【发布时间】:2011-04-02 18:51:56
【问题描述】:
我有一个正则表达式来匹配用户名(在 PHP 中使用 preg_match 起作用):
/[a-z]+(?(?=\-)[a-z]+|)\.[1-9][0-9]*/
此模式匹配abc.124、abc-abc.123 等形式的用户名。
但是,当我将其用于 JavaScript 时:
var re = new RegExp("/[a-z]+(?(?=\-)[a-z]+|)\.[1-9][0-9]*/");
我收到一个语法错误:
SyntaxError: Invalid regular expression: /[a-z]+(?(?=-)[a-z]+|).[1-9][0-9]*/: Invalid group
(?(?=\-)[a-z]+|) 是说如果在[a-z]+ 之后我们看到- 然后断言[a-z]+ 在它之后,否则,什么都不匹配。这一切在 PHP 中都很好用,但是我错过了什么不同的 JavaScript 呢?
编辑:我很欣赏 cmets,现在我有最后一个问题:
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);
此警报显示为null?但是,如果我执行以下操作,它会起作用:
var patt=/[a-z]+(?:-[a-z]+)?\.[1-9][0-9]*/;
var result=patt.exec(str);
alert(result);
为什么“new RegExp()”不起作用?
【问题讨论】:
-
Javascript 不支持
(?部分的条件 -
像 JS 中
new的大多数其他用法一样,我避免使用new RegExp。请注意,到目前为止发布的两个答案都使用文字形式而不是new:developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions
标签: php javascript regex