Думаю, это простой вопрос.
Я пытаюсь найти вхождение строки в другой строке, используя регулярное выражение в JavaScript, например:
var content ="Hi, I like your Apartment. Could we schedule a viewing? My phone number is: ";
var gent = new RegExp("I like your Apartment. Could we schedule a viewing? My", "g");
if(content.search(gent) != -1){
alert('worked');
}
Это не работает из-за ?
персонажа ... Я пытался сбежать с помощью \
, но это тоже не сработало. Есть ли другой способ использовать ?
буквально вместо специального символа?
javascript
regex
literals
Андрей
источник
источник
str.search("?")
это определенно похоже на ошибку, потому что это не регулярное выражение и не должно рассматриваться как одно. 🤦Ответы:
Вам нужно избежать его двумя обратными косыми чертами
Смотрите это для более подробной информации:
http://www.trans4mind.com/personal_development/JavaScript/Regular%20Expressions%20Simple%20Usage.htm
источник
Вы должны использовать двойную косую черту:
var regex = new RegExp("\\?", "g");
Зачем? потому что в JavaScript
\
символ также используется для экранирования символов в строках, поэтому: "\?" становится:"?"
И
"\\?"
становится"\?"
источник
Вы можете ограничить свое регулярное выражение косой чертой вместо кавычек, а затем одной обратной косой чертой, чтобы избежать вопросительного знака. Попробуй это:
var gent = /I like your Apartment. Could we schedule a viewing\?/g;
источник
Всякий раз, когда у вас есть известный шаблон (то есть вы не используете переменную для построения RegExp), используйте буквальную нотацию регулярного выражения, где вам нужно использовать только одиночные обратные косые черты, чтобы избежать специальных метасимволов регулярного выражения:
var re = /I like your Apartment\. Could we schedule a viewing\?/g; ^^ ^^
Всякий раз, когда вам нужно создать RegExp динамически, используйте
RegExp
нотацию конструктора, в которой вы ДОЛЖНЫ использовать двойную обратную косую черту для обозначения буквальной обратной косой черты :var questionmark_block = "\\?"; // A literal ? var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; // Note the dot must also be escaped to match a literal dot var re = new RegExp(initial_subpattern + questionmark_block, "g");
И если вы используете
String.raw
строковый литерал, вы можете использовать его\
как есть (см. Пример использования строкового литерала шаблона, где вы можете помещать переменные в шаблон регулярного выражения):const questionmark_block = String.raw`\?`; // A literal ? const initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; const re = new RegExp(`${initial_subpattern}${questionmark_block}`, 'g'); // Building pattern from two variables console.log(re); // => /I like your Apartment\. Could we schedule a viewing\?/g
Обязательно прочтите: RegExp: Описание в MDN.
источник