2011-01-26 2 views
2

Я хочу обернуть все вхождения определенных слов в заданную строку с квадратными скобками в JavaScript.Изменить соответствие RegEx в JavaScript

Скажите, что эти слова - это яблоки, апельсины и бананы. Затем текст темы "You are comparing apples to oranges." должен превратиться в "You are comparing [apples] to [oranges]."

Регулярное выражение для этого было бы (apples|oranges), но вопрос заключается в том, чтобы обернуть или в более общем плане, изменять каждый матч. String.replace() позволяет вам заменять найденные совпадения с некоторым заданным значением, а не значением, основанным на совпадении.

Спасибо.

+2

На самом деле, регулярное выражение для этого будет '(яблоки | апельсины)' .. – gnarf

+0

Спасибо. Исправлена. :) –

ответ

6
js> var str = 'You are comparing apples to oranges.'; 
js> str.replace(/(apples|oranges)/g, '[$1]') 
You are comparing [apples] to [oranges]. 

Если вы предпочитаете функцию, где вы можете просто кормить массив слов:

function reg_quote(str, delimiter) { 
    return (str+'').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\'+(delimiter || '')+'-]', 'g'), '\\$&'); 
} 

function mark_words(str, words) { 
    for(var i = 0; i < words.length; i++) { 
     words[i] = reg_quote(words[i]); 
    } 
    return str.replace(new RegExp('(' + words.join('|') + ')', 'g'), '[$1]') 
} 

Демо:

js> mark_words(str, ['apples', 'oranges']); 
You are comparing [apples] to [oranges]. 
js> mark_words(str, ['apples', 'You', 'oranges']); 
[You] are comparing [apples] to [oranges]. 

Если вы хотите, это нечувствительно к регистру, замените 'g' с 'gi'.

2
'You are comparing apples to oranges.'.replace(/(apples|oranges)/g, "[$1]"); 
//"You are comparing [apples] to [oranges]." 
3

В дополнение к простой строкой замещения, упомянутой другими, вы также можете передать функцию String.replace(), которая вызывается для каждого соответствия, а возвращаемое значение возвращается в результирующую строку. Это позволяет вам выполнять более сложные преобразования. Для получения дополнительной информации см:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter

1

Это очень некрасиво код, но он делает работу:

var string = "You are comparing apples to oranges"; 
    var regEx = "(apples|oranges)"; 
    var re = new RegExp(regEx, "g"); 
    for (var i=0; i<string.match(re).length; i++) 
    { 
     string = string.replace(string.match(re)[i], "[" + string.match(re)[i] + "]"); 
    } 
    alert(string); 
Смежные вопросы