Ich nehme an, Sie haben ein Literal \
in Ihren Strings, und dass Ihre Frage einen Tippfehler in t enthält er gab String-Literal ein. In JS C-Strings müssen Sie einen doppelten \
verwenden, um einen Literal-Backslash zu definieren (da in regulären String-Literalen Escape-Sequenzen wie \r
, \n
usw. definiert werden können).
Ihr Regex muss mit allen Zeichen außer \
und |
oder einem beliebigen Literal \
übereinstimmen, gefolgt von einem beliebigen Buchstaben.Wenn die Zeichenfolge eine wörtliche \
gleich können, müssen Sie
var a = 'abc\\&|\\|cba';
b = a.match(/(?:[^\\|]|\\.?)+/g);
console.log(b);
Das Muster passt:
(?:
- (Beginn einer Nicht-Erfassung Wechsel Gruppe)
[^\\|]
- beliebige andere Zeichen als \
und |
|
- oder
\\.?
- ein \
mit irgendwelchen 1 oder 0 Zeichen gefolgt, aber eine neue Zeile
)+
- 1 oder mehrmals
Nur um zu klären: Sie haben ' var a = 'abc \\ & | \\ | cba'; '(=' abc \ & | \ | cba') oder wirklich 'var a = 'abc \ & | \ | cba';' (= 'abc & | | cba')? Außerdem brauchen Sie hier keine Capturing Group, Sie benötigen einen Lookbehind, aber da es in JS regex flavour fehlt, müssen Sie die benötigten Strings * anpassen *. –
Versuchen Sie ['b = a.match (/ (?: [^ \\ |] | \\.) +/G)'] (https://jsfiddle.net/r97opth9/) –
Wenn Sie die trennen müssen extrahierte Wörter mit "|" Brauchen Sie absichtlich nur die geteilten Wörter, die mit Alphabeten beginnen, wie '[" abc \ & "," cba "]'? oder sonst wird Ihr Array wie folgt aufgeteilt nach Ihrer String-Variablen a -> '[" abc \ & "," \ "," cba "]' –