regex javascript'te kaçan soru işareti


91

Bu bence basit bir soru.

JavaScript'te regex kullanarak başka bir dizede bir dizenin oluşumunu şu şekilde aramaya çalışıyorum:

 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');     
 }          

Bu ?karakter yüzünden işe yaramıyor .... Ondan kaçmayı denedim \ama bu da işe yaramıyor. ?Özel bir karakter yerine tam anlamıyla kullanmanın başka bir yolu var mı ?


Bunun en kötü yanı, normal ifade yerine bir dize kullanmanın bile bu soruna neden olmasıdır, örneğin str.search("?")Bu kesinlikle bir hata gibi görünüyor çünkü bu bir normal ifade değil ve bir normal ifade olarak görülmemesi gerekiyor. 🤦
Synetech

Yanıtlar:



26

Çift eğik çizgi kullanmalısınız:

var regex = new RegExp("\\?", "g");

Neden? çünkü JavaScript'te \dizelerdeki karakterlerden kaçış yapmak için de kullanılır, dolayısıyla: "\?" şu hale gelir:"?"

Ve "\\?"olur "\?"


16

Normal ifadenizi tırnak işaretleri yerine eğik çizgilerle ve ardından soru işaretinden kaçmak için tek bir ters eğik çizgiyle sınırlandırabilirsiniz. Bunu dene:

var gent = /I like your Apartment. Could we schedule a viewing\?/g;

6

Eğer bir yaşadığımızda bilinen deseni (bir Normİfd inşa etmek için bir değişken kullanmayın yani), kullanım değişmezi regex notasyonu sadece kullanmasının gerektiği durumlarda tek özel regex metakarakterlerini kaçmak için ters eğik çizgi:

var re = /I like your Apartment\. Could we schedule a viewing\?/g;
                               ^^                            ^^

Dinamik olarak bir RegExp oluşturmaya ihtiyaç duyduğunuzda, değişmez bir ters eğik çizgiyi belirtmek için ters eğik çizgileri iki katına çıkarmanız GEREKEN RegExpyapıcı gösterimini kullanın :

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");

Ve String.rawdize değişmezini kullanırsanız \, olduğu gibi kullanabilirsiniz (değişkenleri normal ifade kalıbına koyabileceğiniz bir şablon dizesi değişmezi kullanma örneğine bakın):

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

Okunması gereken bir: RegExp: MDN'deki Açıklama .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.