1

次のスクリプトを使用して、単語の複数回の出現を検出しようとしましたblueが、単に出力されeます。何故ですか ?

var reg_5 = /[blue]+/g;
var str = "Sky was dark and the mood was blue.Sky was dark but the water felt blue.";
document.write("<br / >" + reg_5.exec(str));
4

3 に答える 3

2

正規表現が間違っています。b、l、u、または e のいずれかが 1 回以上出現するかどうかを検索します。

あなたの正規表現は次のようになります。

/blue/g

次に、ループを使用します。

var finder = /blue/g;
var result;
while( ( result = finder.exec( str ) ) ){
    console.log( result );
}

結果がnullになる限り、正規表現を実行する必要があります。g フラグがないと、このようには機能しません。ファインダーには、最後の一致のインデックスを示す lastIndex プロパティがあるため、正規表現を再作成せずに再利用したい場合は、このプロパティをゼロに戻してください。

于 2013-02-24T11:05:17.030 に答える
1

文字クラスを失う

var reg_5 = /blue/g;

于 2013-02-24T11:05:11.977 に答える
0

einの最初の一致は/[blue]+/g;in でstrあるため、出力eされtheます。その理由と正規表現がどうあるべきかについては、フィリップの回答を参照してください。

グローバルに一致する場合、つまり複数の一致を探している場合で、かつ capture groups を使用していない場合は、 を使用してすべての一致の配列を取得()できます。match

var m = str.match( /blue/g );
var n = m == null ? 0 : m.length;

console.log( 'The word "blue" appeared ' + n + ' times.' );   
于 2013-02-24T11:47:48.760 に答える