wake-up-neo.com

Teilen Sie eine Zeichenfolge basierend auf mehreren Trennzeichen

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?

32
Okky

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);

http://jsfiddle.net/cpdjZ/

50
melc

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.

7
anubhava

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).

4
samjudson

Ich denke, Sie müssten den Pluszeichen, * und? Entkommen, da sie in den meisten Regex-Sprachen eine besondere Bedeutung haben

2
Friso

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.

1
Roy Dictus