2015-04-15 3 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 идти". это не подчеркивает текст. 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

я понял, что вы хотите RegEx, то будет все матчи но старт.

Так соответствие для "ЭСТ":

Test будет соответствовать

est не будет соответствовать, потому что это в самом начале.

Если я понял правильно, чем следующая строка должна помочь:

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

Если я missunderstood, пожалуйста, комментарии и оставить его здесь. Может быть, когда-нибудь кто-то найдет здесь, и это может быть решением, которое он искал.

Fiddle (палочки): http://jsfiddle.net/1uyg9wqm/38/

Смежные вопросы