0

今日、正規表現の紹介を勉強していて、SOに関するこの投稿に出くわしました

これらのパターンをテストするために:/video/123/slug/video/123、この正規表現が与えられました:

([^/]+)/([0-9]+)(?:/([^/]+))?

基本的にそれがどのように機能するかは理解していますが、コンストラクターの正規表現に入れた場合にのみ機能します。

var test1 = new RegExp("([^/]+)/([0-9]+)(?:/([^/]+))?"),
a = "/video/123/slug",
b = "/video/123";
console.log(test1.test(a)); //true

しかし、文字通り失敗します:

/([^/]+)/([0-9]+)(?:/([^/]+))?")/.test(a) // all sorts of warnings and an error: Uncaught SyntaxError: Unexpected token ) 

どうしてこれなの?http://jsbin.com/idegal/1/edit

4

1 に答える 1

1

/正規表現を文字通り使用する場合の区切り記号として機能します。

したがって、エスケープする必要があります\/。正規表現は次のようになります

  /([^\/]+)\/([0-9]+)(?:\/([^\/]+))?")/.test(a)

文字列リテラル内で使用する場合はエスケープする必要はありません

于 2013-07-03T05:50:13.827 に答える