0

JavaScriptを使用して、これに似たパターンを解析したい:

@[10] or @[15]

全力を尽くして、私はこれを思いつきました:

@\\[(.*?)\\]

このパターンは正常に機能しますが、問題は、これらの角かっこの白黒に一致することです。数字だけに合わせたい。私もこれらを試しました:

@\\[(0-9)+\\]

@\\[([(0-9)+])\\]

しかし、これらは何も一致しません。

また、文字列内の単語の一部ではなく、完全な単語であるパターンのみを一致させたいと考えています。つまり、スクリプトを開始または終了しない場合は、両側にスペースを含める必要があります。つまり、次のようなフレーズと一致するべきではありません。

abxdcs@[13]fsfs

前もって感謝します。

4

3 に答える 3

1

次の正規表現を使用します。

/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g

パターン ( @[number]) が単語の一部でない場合に一致します。文字列の開始または終了でない場合は、両側にスペースを含める必要があります。

グループを使用するため、数字が必要な場合はグループ 1 を使用します。

テストコード (デモはここをクリック):

console.log(/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g.test("@[10]")); // true
console.log(/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g.test("@[15]")); // true
console.log(/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g.test("abxdcs@[13]fsfs")); // false
console.log(/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g.test("abxdcs @[13] fsfs")); // true

var r1 = /(?:^|\s)@\[([0-9]+)\](?=$|\s)/g
var match = r1.exec("@[10]");
console.log(match[1]); // 10

var r2 = /(?:^|\s)@\[([0-9]+)\](?=$|\s)/g
var match2 = r2.exec("abxdcs @[13] fsfs");
console.log(match2[1]); // 13

var r3 = /(?:^|\s)@\[([0-9]+)\](?=$|\s)/g
var match3;
while (match3 = r3.exec("@[111] @[222]")) {
    console.log(match3[1]);
}
// while's output: 
// 111
// 222
于 2013-06-12T19:52:47.740 に答える
0

文字クラス内にそれほど多くの文字は必要ありません。さらに重要なことに、+ を間違った場所に置きます。これを試してください: @\\[([0-9]+)\\].

于 2013-06-12T19:53:32.497 に答える