20

これが私の問題です。大文字と小文字が混在する文字列があります。大文字と小文字を区別せずに検索してから、一致を一致の両側のいくつかの文字に置き換えたい。

例えば:

var s1 = "abC...ABc..aBC....abc...ABC";
var s2 = s.replace(/some clever regex for abc/g, "#"+original abc match+"#");

s2の結果は次のようになります。

"#abC#...#ABc#..#aBC#....#abc#...#ABC#"

これは正規表現で実行できますか?もしそうなら、どのように?

4

3 に答える 3

42

これは、正規表現置換のコールバック関数を使用して実行できます。

var s1 = "abC...ABc..aBC....abc...ABC";

var s2 = s1.replace(/abc/ig, function (match) {
  return "#" + match + "#"  ;
}
 );

alert(s2);

デモ: http: //jsfiddle.net/dxeE9/

于 2012-12-05T11:02:57.473 に答える
23

これは、後方参照を使用して行うことができます。

var s2 = s.replace(/your complex regex/g, "#$&#");

後方参照$&は、一致全体をもたらします。いずれにせよ「abc」に一致させたい場合:

var s2 = s.replace(/abc/ig, "#$&#");

大きなパターンの一部だけを取り込みたい場合は、グループ番号で参照できます。

var s2 = s.replace(/some (part) of a string/ig, "#$1#");

グループは、左から右へ、左かっこによって番号が付けられ$1ます$9

于 2012-12-05T11:04:43.687 に答える
5

これを行うこともできます

yourString.replace(/([a-z]+)/ig, "#$1#")
于 2012-12-05T11:12:38.990 に答える