Я хотел бы создать String.replaceAll()
метод в JavaScript, и я думаю, что использование регулярных выражений было бы наиболее кратким способом сделать это. Однако я не могу понять, как передать переменную в регулярное выражение. Я могу сделать это уже, что заменит все экземпляры "B"
с "A"
.
"ABABAB".replace(/B/g, "A");
Но я хочу сделать что-то вроде этого:
String.prototype.replaceAll = function(replaceThis, withThis) {
this.replace(/replaceThis/g, withThis);
};
Но очевидно, что это заменит только текст "replaceThis"
... как мне передать эту переменную в мою строку регулярного выражения?
javascript
regex
JC Grubbs
источник
источник
Ответы:
Вместо использования
/regex/g
синтаксиса вы можете создать новый объект RegExp :Таким способом вы можете динамически создавать регулярные выражения. Тогда вы будете делать:
источник
/\/word\:\w*$/
, убедитесь , чтобы избежать ваши обратные слэши:new RegExp( '\\/word\\:\\w*$' )
./
не имеет особого значения, если вы создаете регулярное выражение из строки, поэтому вам не нужно избегать его./\/word\:\w*$/
должно бытьnew RegExp('/word\\:\\w*$')
Как упоминал Эрик Венделин, вы можете сделать что-то вроде этого:
Это дает
"regex matching ."
. Тем не менее, он потерпит неудачу, если str1"."
. Вы ожидаете, что результат будет"pattern matching regex"
, заменив период на"regex"
, но он окажется ...Это потому, что, хотя
"."
это строка типа String, в конструкторе RegExp она все равно интерпретируется как регулярное выражение, означающее любой символ без прерывания строки, то есть каждый символ в строке. Для этой цели может быть полезна следующая функция:Тогда вы можете сделать:
уступая
"pattern matching regex"
.источник
-
и включают=!:/
.Как всегда: не используйте регулярные выражения, если нет необходимости. Для простой замены строки используется идиома:
Тогда вам не нужно беспокоиться о проблемах цитирования, упомянутых в ответе Gracenotes.
источник
split
иreplace
могут принимать либо строку, либоRegExp
объект. Проблема, котораяreplace
имеет этоsplit
, состоит в том, что когда вы используете строку, вы получаете только одну замену.Если вы хотите получить ВСЕ вхождения (
g
), учитывайте регистр (i
) и используйте границы, чтобы это слово не входило в другое слово (\\b
):Пример:
источник
rx
-style интерполяции, через строки шаблонов.)Для тех, кто хочет использовать переменную с методом match , это сработало для меня
источник
Эта:
эквивалентно этому:
См. Http://www.w3schools.com/jsref/jsref_obj_regexp.asp .
источник
pattern
как переменную, во 2-м - как строкуисточник
Вы хотите построить регулярное выражение динамически, и для этого правильным решением является использование
new RegExp(string)
конструктора. Чтобы конструктор обрабатывал специальные символы буквально , вы должны избегать их. Там является встроенной функцией в JQuery UI автозаполнения виджет под названием$.ui.autocomplete.escapeRegex
:Если вы используете пользовательский интерфейс jQuery, вы можете использовать эту функцию или скопировать ее определение из источника :
И используйте это так:
источник
Тест с этим инструментом
источник
Проверьте это как:
источник
Вот еще одна замена replaceAll:
источник
И версия ответа Стивена Пенни, написанная coffeescript, так как это результат №2 в Google .... даже если кофе - это просто javascript с удалением большого количества символов ...;)
и в моем конкретном случае
источник
robot.name=hubot
это не JavaScriptХотя вы можете создавать динамически создаваемые RegExp (как и другие ответы на этот вопрос), я повторю свой комментарий из аналогичного поста : функциональная форма String.replace () чрезвычайно полезна и во многих случаях уменьшает потребность в динамически создаваемые объекты RegExp. (что является своего рода болью, потому что вы должны выразить входные данные для конструктора RegExp в виде строки, а не использовать литеральный формат слешей / [AZ] + / regexp)
источник
Чтобы удовлетворить мою потребность вставить переменную / псевдоним / функцию в регулярное выражение, вот что я придумал:
где 'oldre' - это исходное регулярное выражение, в которое я хочу вставить переменную, 'xx' - это заполнитель для этой переменной / псевдонима / функции, а 'yy' - это фактическое имя переменной, псевдоним или функция.
источник
Вы можете использовать это, если $ 1 не работает с вами
источник
Вы всегда можете использовать
indexOf
повторно:Это не входит в бесконечный цикл, когда замена содержит совпадение.
источник
Ваше решение здесь:
Передайте переменную в регулярное выражение.
То, что я реализовал, - это взятие значения из текстового поля, которое вы хотите заменить, а другое - текстовое поле «заменить на», получение значения из текстового поля в переменной и присвоение переменной значения RegExp. функция для дальнейшей замены. В моем случае я использую Jquery, вы также можете сделать это только с помощью JavaScript.
Код JavaScript:
Этот код находится на событии Onclick кнопки, вы можете поместить это в функцию для вызова.
Теперь вы можете передать переменную в функцию замены.
источник
Эта функция, вызывающая сам себя, будет перебирать элементы replacerItems с использованием индекса и глобально изменять replacerItems [index] в строке при каждом проходе.
источник
Ни один из этих ответов не был мне понятен. В конце концов я нашел хорошее объяснение на http://burnignorance.com/php-programming-tips/how-to-use-a-variable-in-replace-function-of-javascript/
Простой ответ:
Например:
источник
var
. Кроме того, если вы пройдете\b
или\1
он сломается.Для множественной замены без регулярных выражений я пошел со следующим:
Важная часть решения была найдена здесь
источник