2013-08-02 5 views
2

Использование JavaScript и регулярного выражения, пример метода string.replace(/[\w]/g, "*") заменяет символы слова на *.JavaScript Regex - Заменить все словарные символы, кроме символов слова между символом X и символом Y

Пример:

John & Sandy went to the market. 

становится:

**** &***; ***** **** ** *** ******. 

Я хочу, чтобы это сделать кроме того что мы хотим, чтобы избежать замены символов внутри "&" и ";" которые не разделены пробелами.

Пример:

 John & Sandy are awesome & rock; They are also weird. 

становится:

 **** & ***** *** ******* & ****; **** *** **** *****. 

Мой регулярное выражение является слабым, и я имею довольно трудно понять это. Чтение других решений также оказалось затруднительным. Я уверен, что это можно сделать в одном шаблоне регулярного выражения.

Это также помогает мне, если вы можете объяснить, что именно происходит в шаблоне регулярных выражений.

Бонусные баллы, если вы можете ограничить, какая последовательность символов может быть в пределах «&» и «;».

+1

Вы считали сначала синтаксическую разметку HTML, чтобы эти сущности были заменены соответствующими символами? Тогда у вас не было бы этой проблемы. –

+0

^^ Похоже на проблему XY. Подчеркивание имеет метод 'unescape'. [Проверить источник] (https://github.com/jashkenas/underscore/blob/master/underscore.js#L1063). – elclanrs

+0

@ ŠimeVidas, я не могу рассмотреть этот вариант. Я должен хранить текст так, как он есть, поскольку он будет использоваться позже. Это будет пытаться решить другую проблему. – Thomas

ответ

5
' John & Sandy are awesome & rock; They are also weird.'.replace(
    /(&[^\s;]*;)|\w/g, function(a, b) { 
    return b || '*'; }); 

Результат:

 **** & ***** *** ******* & ****; **** *** **** *****. 

Пробовал и работает для меня в Firefox и Chrome.

+0

Это также работает в IE8. Спасибо. – Thomas

+0

Умное решение! Я считаю, что альтернативной формой заключенной в скобки части будет '(&\S+?;)', минимальное (не жадное) совпадение для непространственных символов. Не уверен, какой из них будет более эффективным. – sundar

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