2015-04-15 66 views
0

我必須突出顯示文字。我寫了小代碼,甚至突出顯示不以給定值開始的文本。那麼是否有任何RegExp服務我的查詢的目的。我試過new RegExp('(^|)' + val, 'gi'),但它刪除文本。這裏是fiddle突出顯示從開頭匹配的文字

var text= 'lu' 
 
$('ul li').each(function(){ 
 
var reg = new RegExp('(' + text + ')', 'gi') 
 
txt = $(this).text();  
 
txt = txt.replace(reg, "<span class='highlight'>" + '$1' + "</span>");    
 
$(this).html(txt);         
 
})
.highlight{color:red}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<ul> 
 
    <li>blue diamond</li> 
 
    <li>blue diamond lue gold</li> 
 
    <li>lue diamond lue gold</li> 
 
    <li>lue diamond lue</li>  
 
</ul>

回答

2

你要找的是\b單詞邊界特殊字符。您正則表達式改成這樣,它會做你想要什麼:

var reg = new RegExp('\\b(' + text + ')', 'gi')

+1

@amit這會在'foo:lu'中做一些事情 –

1

您應該使用單詞邊界,以避免匹配部分單詞:

var reg = new RegExp('(\\b' + text + '\\b)', 'gi'); 

Updated JSFiddle

+0

當我輸入「lue go」時。它不突出顯示文字。 HTTP://的jsfiddle。net/1uyg9wqm/25/ – Carlos

+0

是的,因爲'lue go'不是一個完整的單詞。你真的想匹配部分單詞並突出顯示它們嗎?我認爲增加一些澄清離子問題會更好。 – anubhava

1

如果你想突出字與lu開始,那麼你可以使用這個正則表達式:

var text= '(?:^|\\s)lu\\w*' 

Working demo

enter image description here

var text= '(?:^|\\s)lu\\w*' 
 
$('ul li').each(function(){ 
 
var reg = new RegExp('(' + text + ')', 'gi') 
 
txt = $(this).text();  
 
txt = txt.replace(reg, "<span class='highlight'>" + '$1' + "</span>");    
 
$(this).html(txt);         
 
})
.highlight{color:red}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<ul> 
 
    <li>blue diamond</li> 
 
    <li>blue diamond lue gold</li> 
 
    <li>lue diamond lue gold</li> 
 
    <li>lue diamond lue</li>  
 
</ul>

1

也正好抓住前面的空間,是指捕捉在更換部件的空格字符組。

var reg = new RegExp('(^|)(' + text + ')', 'gim') 
txt = txt.replace(reg, "$1" + "<span class='highlight'>" + '$2' + "</span>"); 

例子:

var text= 'lu' 
 
$('ul li').each(function(){ 
 
var reg = new RegExp('(^|)(' + text + ')', 'gim') 
 
txt = $(this).text();  
 
txt = txt.replace(reg, "$1" + "<span class='highlight'>" + '$2' + "</span>");    
 
$(this).html(txt);         
 
})
.highlight{color:red}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<ul> 
 
    <li>blue diamond</li> 
 
    <li>blue diamond lue gold</li> 
 
    <li>lue diamond lue gold</li> 
 
    <li>lue diamond lue</li>  
 
</ul>

+0

它會刪除文本。 http://jsfiddle.net/1uyg9wqm/37/ – Carlos

+0

檢查我的編輯.. @amit你忘記引用替換部分中的第一個捕獲的組。 –

0

我理解,你想有一個正則表達式,這就是比賽的一切,但開始。

所以匹配的 「EST」:

Test將匹配

est不匹配,因爲它是在一開始。

如果我的理解是正確的,比下面這行應該有所幫助:

var reg = new RegExp('^([^'+text+'](' + text + '))', 'gi'); 

如果我missunderstood,請發表評論,並離開這裏。也許有一天,有人回到這裏,這可能是他/她尋找的解決方案。

小提琴(棍棒):http://jsfiddle.net/1uyg9wqm/38/