2017-01-04 6 views
2

少し強調表示するようにしています。 私が持っている問題は、$ 1にマッチしたものを挿入しないということです。 My機能は、あなたが見ることができるように、それは試合をラップする必要があり

getMatch(str, search) { 
    let result = str.replace(new RegExp(search, 'gi'), '<span class="match">$1</span>'); 
    return result; 
} 

のように見えます。しかしそれはしません。

My string <span class="match">with</span> highlighting.

が、私はちょうど得る:私の予想結果は

let string = 'My string with higlighting.'; 
let match = getMatch(string, 'With'); 

My string <span class="match">$1</span> highlighting.

ので、$ 1が交換されていなかったここでどのように私はそれを使用する例 マッチングによって。

どうすれば解決できますか?

+0

私はあなたが 'とマッチ全体を包むようにしたいと思いますスパン '、そう?次に、 '$ 1'を' $& 'で置き換えます。 –

+0

私はすでに試したことがあります。問題は、大文字と小文字を区別しないが、文字列が大文字であることです。だから私は検索文字列で置き換えることができません、私は一致と置き換える必要があります – mastercheef85

+0

あなたの '' With''はキャプチャグループを持たないので、 '$ 1'はリテラル文字列として解析されます。 '$&'は*完全一致値*を置換文字に挿入します。 –

答えて

2

'With'にはキャプチャグループがないため、$1はリテラル文字列として解析されます。

spanに完全一致をラップする場合は、$1$&に置き換えます。

getMatch(str, search) { 
    let result = str.replace(new RegExp(search, 'gi'), '<span class="match">$&</span>'); 
    return result; 
} 

MDN replace referenceを参照してください:

$&挿入マッチした部分文字列。

+0

ありがとう! – mastercheef85

1

キャプチャグループでないと、あなたは括弧を追加することによって、それを変換する必要があります。

let string = 'My string with higlighting.'; 
let match = getMatch(string, '(With)'); 

出力は次のようになります。

My string <span class="match">with</span> higlighting. 
関連する問題