Esta é uma pergunta simples, eu acho.
Estou tentando pesquisar a ocorrência de uma string em outra string usando regex em JavaScript assim:
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');
}
Isso não funciona por causa do ?
personagem .... Eu tentei escapar com \
, mas também não funcionou. Existe outra maneira de usar ?
literalmente em vez de um caractere especial?
javascript
regex
literals
Andrew
fonte
fonte
str.search("?")
isso definitivamente parece um bug porque não é um regex e não deve ser tratado como um. 🤦Respostas:
Você precisa escapar com duas barras invertidas
Veja isto para mais detalhes:
http://www.trans4mind.com/personal_development/JavaScript/Regular%20Expressions%20Simple%20Usage.htm
fonte
Você deve usar barra dupla:
var regex = new RegExp("\\?", "g");
Por quê? porque em JavaScript o
\
também é usado para escapar caracteres em strings, então: "\?" torna-se:"?"
E
"\\?"
, torna-se"\?"
fonte
Você pode delimitar sua regexp com barras em vez de aspas e, em seguida, uma única barra invertida para escapar do ponto de interrogação. Experimente isto:
var gent = /I like your Apartment. Could we schedule a viewing\?/g;
fonte
Sempre que você tiver um padrão conhecido (ou seja, você não usar uma variável para construir um RegExp), use a notação literal de regex, onde você só precisa usar barras invertidas simples para escapar de metacaracteres regex especiais:
var re = /I like your Apartment\. Could we schedule a viewing\?/g; ^^ ^^
Sempre que você precisar construir um RegExp dinamicamente, use a
RegExp
notação do construtor onde você DEVE dobrar as barras invertidas para que denotem uma barra invertida literal :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");
E se você usar o
String.raw
literal de string, você pode usar\
como está (veja um exemplo de uso de um literal de string de modelo onde você pode colocar variáveis no padrão regex):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
Uma leitura obrigatória: RegExp: Descrição em MDN.
fonte