0

javascriptの正規表現に問題があります。私は次のコードを持っていますが、一致するはずですが、一致しません。

var rgx = new RegExp("{\d+:(\d+)}");

if (rgx.test("{0:00000}") == true) {
    alert("match");
}
else
{
    alert("no match");
}

ここでtest()を使用する必要があるかどうかわかりません。正規表現でグループをキャッチしたいのですが、exec()でも同じ結果が得られるようです。

だから私は何が間違っているのですか?

4

2 に答える 2

5

問題は、正規表現の\文字をエスケープする必要があることです。

var rgx = new RegExp("{\\d+:(\\d+)}");

または、リテラル構文を使用することもできます。

var rgx = /{\d+:(\d+)}/;

結果を取得するには、testやexecではなく.match関数も使用する必要があります。一致しない場合はnullを返し、一致する場合は少なくとも1つの要素の配列を返します。

于 2012-11-26T06:49:49.813 に答える
0

正規表現には複数の問題があります。

var rgx = new RegExp("{\d+:(\d+)}");

最初に(syazdaniによって最初に指摘された)、バックスラッシュを文字列エスケープする必要があります。

var rgx = new RegExp("{\\d+:(\\d+)}");

または、正規表現リテラルを使用することをお勧めします。

var rgx = /{\d+:(\d+)}/

次に、正規表現で特別な意味を持ち、エスケープする必要があります{}

var rgx = /\{\d+:(\d+)\}/

第三に、Ianが指摘したように、文字列全体が一致していることを確認することをお勧めします。

var rgx = /^\{\d+:(\d+)\}$/

RegExp#test文字列が一致するかどうかにかかわらず、ブール値のtrue/falseを返します。

RegExp#exec文字列が一致する場合、または文字列が一致しない場合は、一致とキャプチャされたすべてのグループを保持する配列を返しますnull

var matches = /\{\d+:(\d+)\}/.exec("{0:000000}");
if(matches){
  console.log(matches[1]); //logs "000000"
}
于 2012-11-26T06:57:09.460 に答える