Discuss / JavaScript / 代码中正则如何匹配测试项中的%?

代码中正则如何匹配测试项中的%?

Topic source

Gingbery

#1 Created at ... [Delete] [Delete and Lock User]

请教一下,代码中正则:

var re = /^[\da-zA-Z]+([._-]\w+)*@([\da-zA-Z]+.)+[a-zA-Z]{2,6}$/; 对:

'bill%gates@ms.com' 测试失败,但是如果把正则表达式中@前后部分开,分别测试就成功,为什么? 比如:

/^[\da-zA-Z]+([._-]\w+)*/.test('bill%gates'); true /([\da-zA-Z]+.)+[a-zA-Z]{2,6}$/.test('ms.com'); true

Astian

#2 Created at ... [Delete] [Delete and Lock User]

\w包含字母或数字或下划线或汉字,没有包含%,所以用这条正则肯定匹配不到'bill%gates@ms.com'。

改成下面这个才可以:

var re = /^[\da-zA-Z]+([%.-]\w+)*@([\da-zA-Z]+.)+[a-zA-Z]{2,6}$/;

re.test('bill%gates@ms.com')//true

而下面这个匹配可以返回true,是因为“bill”被匹配到了,而不是整个字符串被匹配到

/^[\da-zA-Z]+([._-]\w+)*/.test('bill%gates');//true

/^[\da-zA-Z]+([._-]\w+)*/.exec('bill%gates');//返回["bill", undefined]

  • 1

Reply