Ilekroć masz znany wzorzec (tj. Nie używasz zmiennej do budowy wyrażenia regularnego), użyj dosłownej notacji wyrażenia regularnego, w której wystarczy użyć pojedynczych odwrotnych ukośników, aby uniknąć specjalnych metaznaków wyrażenia regularnego:
var re = /I like your Apartment\. Could we schedule a viewing\?/g;
^^ ^^
Ilekroć potrzebujesz dynamicznie zbudować RegExp, użyj RegExpnotacji konstruktora, w której MUSISZ podwójny ukośnik odwrotny, aby oznaczyć dosłowny ukośnik odwrotny :
var questionmark_block = "\\?";
var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing";
var re = new RegExp(initial_subpattern + questionmark_block, "g");
A jeśli użyjesz String.rawliterału ciągu, którego możesz użyć w \takiej postaci, w jakiej jest (zobacz przykład użycia literału ciągu szablonu, w którym możesz umieścić zmienne we wzorcu wyrażenia regularnego):
const questionmark_block = String.raw`\?`;
const initial_subpattern = "I like your Apartment\\. Could we schedule a viewing";
const re = new RegExp(`${initial_subpattern}${questionmark_block}`, 'g');
console.log(re);
Koniecznie przeczytaj: RegExp: Opis w MDN.
str.search("?")To zdecydowanie wygląda na błąd, ponieważ nie jest to wyrażenie regularne i nie powinno być traktowane jako jeden. 🤦