Вполне возможно, что люди, которые подписываются на вашу службу, вводят электронные письма с ошибками ввода, которые вы не исправляете. Например: chris@gmial.com -or- james@hotnail.com.
И такие домены сконфигурированы для использования в качестве spamtraps , которые автоматически помещают IP-адрес вашего почтового сервера и / или домен и повредить его репутации.
Чтобы избежать этого, выполните двойную проверку для адреса электронной почты, который вводится при подписке на продукт. Также отправьте электронное письмо с подтверждением, чтобы убедиться, что этот адрес электронной почты проверен на 100% человеком, который вводит письмо с подтверждением, прежде чем отправлять им ключ продукта или принять их подписку. Письмо с подтверждением должно требовать, чтобы получатель щелкнул ссылку или ответ, чтобы действительно подтвердить, что владельцем почтового ящика является человек, который зарегистрировался.
Вместо синтаксиса /regex/g
вы можете создать новый объект RegExp :
var replace = "regex";
var re = new RegExp(replace,"g");
Таким образом вы можете динамически создавать объекты регулярных выражений. Затем вы выполните:
"mystring".replace(re, "newstring");
Чтобы удовлетворить мою потребность вставить переменную / псевдоним / функцию в регулярное выражение, это то, что я придумал:
oldre = /xx\(""\)/;
function newre(e){
return RegExp(e.toString().replace(/\//g,"").replace(/xx/g, yy), "g")
};
String.prototype.replaceAll = this.replace(newre(oldre), "withThis");
, где «oldre» - это исходное регулярное выражение, которое я хочу вставить переменную, «xx» - это заполнитель для этой переменной / псевдонима / функции, а «yy» - это имя, псевдоним или функция переменной.
Хотя вы можете создать динамически созданный RegExp (как и другие ответы на этот вопрос), я отправлю комментарий из аналогичного сообщения : Функциональная форма String.replace () чрезвычайно полезна и во многих случаях уменьшает потребность в динамически создаваемых объектах RegExp. (которые являются своего рода болью, потому что вы должны выразить ввод конструктора RegExp как строку, а не использовать листы слэша / [A-Z] + / regexp)
Вы можете использовать это, если $ 1 не работает с вами
var pattern = new RegExp("amman","i");
"abc Amman efg".replace(pattern,"<b>"+"abc Amman efg".match(pattern)[0]+"</b>");
Если вы хотите получить ВСЕ вхождения (g
), нечувствительны к регистру (i
) и используйте границы, чтобы это не было слово в другом слове (\\b
):
re = new RegExp(`\\b${replaceThis}\\b`, 'gi');
Пример:
let inputString = "I'm John, or johnny, but I prefer john.";
let replaceThis = "John";
let re = new RegExp(`\\b${replaceThis}\\b`, 'gi');
console.log(inputString.replace(re, "Jack")); // I'm Jack, or johnny, but I prefer Jack.
Это:
var txt=new RegExp(pattern,attributes);
эквивалентно этому:
var txt=/pattern/attributes;
pattern
как переменную, во втором - как строку
– vladkras
9 July 2013 в 05:16
И вариант ответа Стивена Пенни из coffeescript, так как это результат # 2 google ... даже если кофе - это просто javascript с большим количеством удаленных символов ...;)
baz = "foo"
filter = new RegExp(baz + "d")
"food fight".match(filter)[0] // food
и в моем конкретном случае
robot.name=hubot
filter = new RegExp(robot.name)
if msg.match.input.match(filter)
console.log "True!"
blockquote>
"ABABAB".replace(/B/g, "A");
Как всегда: не используйте regex, если вам не нужно. Для простой замены строки идиома:
'ABABAB'.split('B').join('A')
Тогда вам не нужно беспокоиться о проблемах с цитированием, упомянутых в ответе Граценота.
split
и replace
могут принимать либо строку, либо объект RegExp
. Проблема, что replace
имеет split
, заключается не в том, что когда вы используете строку, вы получаете только одну замену.
– bobince
13 June 2013 в 10:05
String.prototype.replaceAll = function(a, b) {
return this.replace(new RegExp(a.replace(/([.?*+^$[\]\\(){}|-])/ig, "\\$1"), 'ig'), b)
}
Проверьте это как:
var whatever = 'Some [b]random[/b] text in a [b]sentence.[/b]'
console.log(whatever.replaceAll("[", "<").replaceAll("]", ">"))
this.replace( new RegExp( replaceThis, 'g' ), withThis );
Ваше решение находится здесь:
Передача переменной в регулярное выражение.
Тот, который я реализовал, - это значение из текста поле, которое вы хотите заменить, а другое - это «заменить на» текстовое поле, получить значение из текстового поля в переменной и установить переменную в функцию RegExp для дальнейшей замены. В моем случае я использую JQuery, вы также можете сделать это только с помощью JavaScript.
Код JavaScript:
var replace =document.getElementById("replace}"); // getting a value from a text field with I want to replace
var replace_with = document.getElementById("with"); //Getting the value from another text fields with which I want to replace another string.
var sRegExInput = new RegExp(replace, "g");
$("body").children().each(function() {
$(this).html($(this).html().replace(sRegExInput,replace_with));
});
Этот код включен в событие Onclick кнопки, вы можете поместите это в функцию для вызова.
Итак, теперь вы можете передать переменную в функции replace.
Как упоминал Эрик Венделин, вы можете сделать что-то вроде этого:
str1 = "pattern"
var re = new RegExp(str1, "g");
"pattern matching .".replace(re, "regex");
Это дает "regex matching ."
. Однако он будет терпеть неудачу, если str1 - "."
. Вы ожидаете, что результат будет "pattern matching regex"
, заменив период на "regex"
, но он окажется ...
regexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregex
Это потому, что, хотя "."
a String, в конструкторе RegExp он по-прежнему интерпретируется как регулярное выражение, что означает любой символ нестрочного разрыва, означающий каждый символ в строке. Для этой цели может быть полезной следующая функция:
RegExp.quote = function(str) {
return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
};
. Тогда вы можете сделать:
str1 = "."
var re = new RegExp(RegExp.quote(str1), "g");
"pattern matching .".replace(re, "regex");
, уступая "pattern matching regex"
.
-
и включают =!:/
.
– chbrown
15 December 2012 в 23:12
Вы всегда можете использовать indexOf
несколько раз:
String.prototype.replaceAll = function(substring, replacement) {
var result = '';
var lastIndex = 0;
while(true) {
var index = this.indexOf(substring, lastIndex);
if(index === -1) break;
result += this.substring(lastIndex, index) + replacement;
lastIndex = index + substring.length;
}
return result + this.substring(lastIndex);
};
Это не переходит в бесконечный цикл, когда замена содержит совпадение.
Вы хотите динамически строить регулярное выражение, и для этого правильным решением является использование конструктора new RegExp(string)
. Чтобы конструктор обрабатывал специальные символы буквально , вы должны избегать их. Существует встроенная функция в виджета автозаполнения jQuery UI , называемая $.ui.autocomplete.escapeRegex
:
[...] вы можете использовать встроенный
$.ui.autocomplete.escapeRegex
. Он возьмет один строковый аргумент и уберет все символы регулярных выражений, что сделает результат безопасным для перехода кnew RegExp()
.Если вы используете jQuery UI, вы можете использовать эту функцию или скопировать его определение из источника :
function escapeRegex(value) { return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); }
И использовать его следующим образом:
"[z-a][z-a][z-a]".replace(new RegExp(escapeRegex("[z-a]"), "g"), "[a-z]"); // escapeRegex("[z-a]") -> "\[z\-a\]" // new RegExp(escapeRegex("[z-a]"), "g") -> /\[z\-a\]/g // end result -> "[a-z][a-z][a-z]"
Вот еще одна реализация replaceAll:
String.prototype.replaceAll = function (stringToFind, stringToReplace) {
if ( stringToFind == stringToReplace) return this;
var temp = this;
var index = temp.indexOf(stringToFind);
while (index != -1) {
temp = temp.replace(stringToFind, stringToReplace);
index = temp.indexOf(stringToFind);
}
return temp;
};
Для тех, кто хочет использовать переменную с методом совпадения, это сработало для меня
var alpha = 'fig';
'food fight'.match(alpha + 'ht')[0]; // fight
String.prototype.replaceAll = function (replaceThis, withThis) {
var re = new RegExp(replaceThis,"g");
return this.replace(re, withThis);
};
var aa = "abab54..aba".replaceAll("\\.", "v");
/\/word\:\w*$/
, обязательно избегайте обратных косых черт:new RegExp( '\\/word\\:\\w*$' )
. – Jonathan Swinney 10 November 2010 в 00:04/
не имеет особого значения, если вы создаете регулярное выражение из строки, поэтому вам не нужно его избегать./\/word\:\w*$/
должен бытьnew RegExp('/word\\:\\w*$')
– Dávid Horváth 11 January 2017 в 14:52