Ich habe versucht, eine Zeichenfolge basierend auf mehreren Trennzeichen aufzuteilen, indem Sie auf Wie teilt man eine Zeichenfolge in Jquery mit mehreren Zeichenfolgen als Trennzeichen auf
Seit mehreren Trennzeichen habe ich mich entschieden zu folgen
var separators = [' ', '+', '-', '(', ')', '*', '/', ':', '?'];
var tokens = x.split(new RegExp(separators.join('|'), 'g'));
Aber ich bekomme Fehler
Uncaught SyntaxError: Invalid regular expression: / |+|-|(|)|*|/|:|?/: Nothing to repeat
Wie man es löst?
escape für Regex-Zeichen erforderlich +, -, (,), * ,?
var x = "adfds+fsdf-sdf";
var separators = [' ', '\\\+', '-', '\\\(', '\\\)', '\\*', '/', ':', '\\\?'];
console.log(separators.join('|'));
var tokens = x.split(new RegExp(separators.join('|'), 'g'));
console.log(tokens);
Das sollte funktionieren:
var separators = [' ', '+', '(', ')', '*', '\\/', ':', '?', '-'];
var tokens = x.split(new RegExp('[' + separators.join('') + ']', 'g'));
Generierte reguläre Ausdrücke verwenden reguläre Ausdrücke: /[ +()*\/:?-]/g
Auf diese Weise müssen Sie nichts entkommen.
Das Folgende wäre eine einfachere Möglichkeit, das Gleiche zu erreichen.
var tokens = x.split(new RegExp('[-+()*/:? ]', 'g'));
Beachten Sie, dass -
an erster Stelle stehen muss (oder mit Escapezeichen versehen ist). Andernfalls wird angenommen, dass es sich um den Operator range
handelt (z. B. a-z
).
Ich denke, Sie müssten den Pluszeichen, * und? Entkommen, da sie in den meisten Regex-Sprachen eine besondere Bedeutung haben
Dies liegt daran, dass Zeichen wie +
und *
in Regex eine besondere Bedeutung haben.
Ändern Sie Ihren Join von |
in |\
und es sollte Ihnen gut gehen, wenn Sie die Literale umgehen.