Ini adalah pertanyaan sederhana menurut saya.
Saya mencoba mencari terjadinya string di string lain menggunakan regex di JavaScript seperti:
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');
}
Ini tidak berhasil karena ?
karakternya .... Saya mencoba melarikan diri dengan \
, tetapi itu juga tidak berhasil. Apakah ada cara lain untuk menggunakan ?
secara harfiah selain sebagai karakter khusus?
javascript
regex
literals
Andrew
sumber
sumber
str.search("?")
Itu pasti tampak seperti bug karena itu bukan regex dan tidak boleh diperlakukan sebagai satu. 🤦Jawaban:
Anda harus menghindarinya dengan dua garis miring terbalik
Lihat ini untuk lebih jelasnya:
http://www.trans4mind.com/personal_development/JavaScript/Regular%20Expressions%20Simple%20Usage.htm
sumber
Anda harus menggunakan garis miring ganda:
var regex = new RegExp("\\?", "g");
Mengapa? karena di JavaScript,
\
juga digunakan untuk melepaskan karakter dalam string, jadi: "\?" menjadi:"?"
Dan
"\\?"
, menjadi"\?"
sumber
Anda dapat membatasi regexp Anda dengan garis miring bukan tanda kutip lalu satu garis miring terbalik untuk menghindari tanda tanya. Coba ini:
var gent = /I like your Apartment. Could we schedule a viewing\?/g;
sumber
Setiap kali Anda memiliki pola yang diketahui (yaitu Anda tidak menggunakan variabel untuk membuat RegExp), gunakan notasi regex literal di mana Anda hanya perlu menggunakan satu garis miring terbalik untuk keluar dari karakter meta regex khusus:
var re = /I like your Apartment\. Could we schedule a viewing\?/g; ^^ ^^
Kapan pun Anda perlu membuat RegExp secara dinamis, gunakan
RegExp
notasi konstruktor di mana Anda HARUS menggandakan garis miring terbalik agar garis miring terbalik tersebut menunjukkan garis miring terbalik :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");
Dan jika Anda menggunakan
String.raw
literal string, Anda dapat menggunakan\
apa adanya (lihat contoh penggunaan literal string template di mana Anda dapat meletakkan variabel ke dalam pola 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
Yang harus dibaca: Ekspresi Reguler: Deskripsi di MDN.
sumber