Heim  >  Artikel  >  Web-Frontend  >  Wie kann man Regex-Instanzen außerhalb von in Anführungszeichen gesetzten Zeichenfolgen zuordnen, auch mit maskierten Anführungszeichen?

Wie kann man Regex-Instanzen außerhalb von in Anführungszeichen gesetzten Zeichenfolgen zuordnen, auch mit maskierten Anführungszeichen?

DDD
DDDOriginal
2024-10-28 00:02:01785Durchsuche

How to Match Regex Instances Outside of Quoted Strings, Even with Escaped Quotes?

Ü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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn