2015-09-02 37 views
1

我想突出顯示一個句子中的單個字符串。替換應該使用不區分大小寫的字符(如My Foo bar中的字符串foo)。在JavaScript中替換/突出顯示字符串 - 保持區分大小寫

這是沒有問題的,我:

var regEx = new RegExp(this._searchString, "gi"); 
var label = $(item).text(); 
label = label.replace(regEx, '<span style="font-weight:bold;">' + this._searchString + '</span>'); 
$(item).html(label); 

的這裏的問題是: 如果我搜索和替換fooMy Foo bar,其結果將是 My <span style="font-weight:bold;">foo</span> bar,但我要的是My <span style="font-weight:bold;">Foo</span> bar

因此,搜索應忽略區分大小寫,但不要替換。任何想法如何做到這一點?我看到的唯一方法是首先檢查字符串是否包含搜索的字符串,將其解壓縮(區分大小寫),修改並將其放回字符串中。但是這對我來說似乎太過分了,不是嗎?

回答

3

您必須通過將其包含在圓括號中並在$1中將其替換爲替換字符串來捕獲您的字符串。

編輯:我用\b包裹匹配模式只匹配整個單詞。

var original_string = 'My Foo bar', 
 
     variable = 'foo', 
 
     regex = new RegExp('(\\b'+variable+'\\b)', 'gi'); // note the parentheses around variable 
 
    console.log(original_string.replace(regex, 'precious $1 is really')); // here you reference the 1st capture with $1

+0

如何通過正則表達式的內部JavaScript變量?我試過''/('+ variable +')/ gi'',但它不起作用。 – Chris

+0

這是因爲您通過將它換成引號將正則表達式轉換爲字符串。使用'RegExp'構造函數。 'var reg = RegExp('('+ variable +')','gi');' – techouse

1

使用這種方法:Javascript replace with reference to matched group?

str = $("#test").text() 
 

 
var regEx = new RegExp("foo", "gi"); 
 

 
str = str.replace(regEx, function(a,b){ 
 
    console.log(a) 
 
\t return '<span style="font-weight:bold;color:red">' + a + '</span>' 
 
}) 
 

 
$("#test").html(str)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div id="test">My Foo bar with Foos and fOO</div>

相關問題