0

考虑到以下两个 javascript 代码片段,我希望 t1 和 t2 都被评估为 false。

var p1 = /^\W*(Port )?(\d+)((X\d+)+)\W*$/
var t1 = p1.test("1X2X")
var m1 = p1.exec("1X2X")    // return null (as expected)

var p2 = /^\W*(Port )?(\d+)((\/\d+)+)\W*$/
var t2 = p2.test("1/2/")
var m2 = p2.exec("1/2/")    // return ["1/2/", undefined, "1", "/2", "/2"]

但是当我在 Firefox (17.0) 中运行代码时,t1 被评估为 false(如预期的那样),但 t2 被评估为 true。有人可以提供一些关于为什么 t2 被评估为 true 的信息吗?

4

2 回答 2

0

\W匹配/但不是X因为\W[^a-zA-Z0-9_]

于 2013-10-04T15:29:21.017 回答
0

这是 regex101.com 调试器可以帮助您的地方:http ://regex101.com/r/tK8cV1/#debugger

这是输出的屏幕截图:http: //imgur.com/e7AIfvX

这可以准确地向您展示您的正则表达式是如何匹配的。然而,这是使用 PCRE 运行的,但对于您的应用程序来说永远不会那么准确。

我希望这有帮助。

于 2013-10-04T15:56:45.110 回答