Wenn Sie ein bekanntes Muster haben (dh Sie verwenden keine Variable zum Erstellen eines RegExp), verwenden Sie die Literal- Regex-Notation, bei der Sie nur einzelne Backslashes verwenden müssen, um speziellen Regex-Metazeichen zu entgehen:
var re = /I like your Apartment\. Could we schedule a viewing\?/g;
^^ ^^
Wenn Sie ein RegExp dynamisch erstellen müssen, verwenden Sie die RegExp
Konstruktornotation, bei der Sie Backslashes verdoppeln MÜSSEN, damit sie einen wörtlichen Backslash bezeichnen :
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");
Und wenn Sie das String.raw
Zeichenfolgenliteral verwenden, können Sie es unverändert verwenden \
(siehe ein Beispiel für die Verwendung eines Vorlagenzeichenfolgenliterals, in dem Sie Variablen in das Regex-Muster einfügen können):
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
Ein Muss: RegExp: Beschreibung bei MDN.
str.search("?")
Das scheint definitiv ein Fehler zu sein, da dies kein regulärer Ausdruck ist und nicht als Eins behandelt werden sollte. 🤦