2015-05-11 6 views
1

У меня есть список около 1000 наград, которые появляются на сайте. Каждая награда в его собственной продолжительности, и соответствует форматуИзменить (жирным) все слова до определенного слова

x for y 

пример:

<span>Broadcast Film Critics Association Award for Best Director</span> 

Для каждого из этих пролетов, я хотел бы жирный шрифт всего текста перед «за». Как я могу найти неограниченное количество слов до (и не включая) слова (а не только символов) «для» и смелых?

Я знаю, с выражением, как

\S+\s+\S+\s+for 

Я ищу до 2-х слов, прежде чем (и включая) символы F, O, и т. Но я хочу совместить слово «для», а не только символы, и я не хочу включать «для» в то, что выделено полужирным шрифтом.

ответ

1

Regex, казалось бы лучшим решением здесь, однако я хотел бы предложить использовать Regex, который соответствует группам, так что вы можете восстановить строку при добавлении <b> теги Попробуйте это:.

$('span').html(function(i, v) { 
    var matches = /(.+)(for.+)/gi.exec(v); 
    return '<b>' + matches[1] + '</b>' + matches[2]; 
}); 

Example fiddle

+0

Хороший вызов на агрессивно соответствие тоже; вопрос о том, зависит ли неохотный или агрессивный матч от данных курса –

+0

Это отлично работает для меня! Если вы не возражаете, я пытаюсь разрушить, как это работает (я новичок в регулярном выражении). Не могли бы вы указать, понимаю ли я что-то из этого неправильно? '/ /' содержит само выражение. '(. +)' соответствует группе каждого символа, не включенного во вторую группу. '(для. +)' соответствует группе каждого символа, начинающейся со слова «для» и продолжая движение вперед. 'gi' ищет все совпадения перед возвратом, а совпадения не учитывают регистр. '.exec (v)' принимает регулярное выражение и создает массив из двух разных групп. Что делает 'v' в' .exec (v) 'do? – GtwoK

+0

'v' - текущее значение html, предоставляемое методом jquerys' html() ' –

0

Это предполагает, что все до самого первого for - это то, что вам нужно для соответствия. Если вы беспокоитесь о более чем одном for в строке, вам понадобится другое решение.

(.*?\b)for 

Это «неохотно матч и захватить все, вплоть до первого перерыва слово с последующим for

http://rubular.com/r/OLNZjkA2ck

Вы также можете использовать

.*?\b(?=for) 
0

Вы также можете сделать регулярное выражение replace для его достижения, как показано ниже.

$('span').html(function(index, content) { 
    return content.replace(/(.+)(for.+)/gi, '<strong>$1</strong>$2'); 
}); 

Demo @Fiddle

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