Übereinstimmende Instanzen außerhalb von Anführungszeichen
Im Gegensatz zu früheren Annahmen ist es möglich, alle Instanzen einer bestimmten Regex abzugleichen, die nicht in Anführungszeichen stehen Teile einer Zeichenfolge mithilfe regulärer Ausdrücke, wobei sogar maskierte Anführungszeichen berücksichtigt werden.
Regex-Lösung
Um dies zu erreichen, verwenden Sie eine Look-Ahead-Behauptung, die prüft, ob jedes Wort vorhanden ist außerhalb von Anführungszeichen, was auftritt, wenn eine gerade Anzahl von Anführungszeichen folgt. Der folgende reguläre Ausdruck erfasst dieses Muster:
\+(?=([^"]*"[^"]*")*[^"]*$)
Umgang mit maskierten Anführungszeichen
Um mit maskierten Anführungszeichen umzugehen, ändern Sie den Ausdruck so, dass Backslashes ignoriert werden und fahren Sie mit dem nächsten nicht maskierten Anführungszeichen fort :
\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)
Dadurch wird sichergestellt, dass maskierte Anführungszeichen nicht als öffnende Anführungszeichen gezählt werden.
JavaScript-Verwendung mit .split() und .replace()
Zur Verwendung mit den JavaScript-Methoden .split() und .replace() kann der folgende Code verwendet werden:
const input = '+bar+baz"not+or\"+or+\"this+\"foo+bar+';
const replaced = input.replace(/\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)/g, '#');
console.log(replaced); // "#bar#baz\"not+or\"+or+\"this+\"foo#bar#"
Das obige ist der detaillierte Inhalt vonWie kann man Regex-Instanzen außerhalb von in Anführungszeichen gesetzten Zeichenfolgen zuordnen, auch mit maskierten Anführungszeichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!