0

次の 2 つの 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

これは、regex101.com デバッガーが役立つ場所です: http://regex101.com/r/tK8cV1/#debugger

出力のスクリーンショットは次のとおりです: http://imgur.com/e7AIfvX

これは、正規表現がどのように一致しているかを正確に示しています。ただし、これは PCRE で実行されますが、アプリケーションの精度が低下することはありません。

これが役立つことを願っています。

于 2013-10-04T15:56:45.110 に答える
0

\W一致し/ますが、そうではないXため\Wです[^a-zA-Z0-9_]

于 2013-10-04T15:29:21.017 に答える