Подтвердить что ты не робот

Разделить строку на основе нескольких разделителей

Я пытался разбить строку на основе нескольких разделителей, обратившись Как разделил строку в jquery с несколькими строками как разделитель

Поскольку несколько разделителей я решил следовать

var separators = [' ', '+', '-', '(', ')', '*', '/', ':', '?'];
var tokens = x.split(new RegExp(separators.join('|'), 'g'));​​​​​​​​​​​​​​​​​

Но я получаю сообщение об ошибке

Uncaught SyntaxError: Invalid regular expression: / |+|-|(|)|*|/|:|?/: Nothing to repeat 

Как его решить?

4b9b3361

Ответ 1

escape, необходимый для символов, связанных с регулярным выражением +, -, (,), *,?

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/

Ответ 2

Это должно работать:

var separators = [' ', '+', '(', ')', '*', '\\/', ':', '?', '-'];
var tokens = x.split(new RegExp('[' + separators.join('') + ']', 'g'));​​​​​​​​​​​​​​​​​

Сгенерированное регулярное выражение будет использовать класс символов regex: /[ +()*\/:?-]/g

Таким образом вам не нужно ничего скрывать.

Ответ 3

Следующим будет более простой способ выполнить одно и то же.

var tokens = x.split(new RegExp('[-+()*/:? ]', 'g'));​​​​​​​​​​​​​​​​​

Обратите внимание, что - должен быть первым (или экранирован), иначе он будет считать, что это оператор range (например, a-z)

Ответ 4

Я думаю, вам нужно было бы избежать +, * и?, поскольку они имеют особое значение в большинстве языков регулярных выражений

Ответ 5

Это связано с тем, что символы, такие как + и *, имеют особое значение в Regex.

Измените ваше соединение с | на |\, и вы должны быть в порядке, избегая литералов.

Ответ 6

Скажите, что ваша строка:

let str = 'word1
word2;word3,word4,word5;word7
word8,word9;word10';

Вы хотите разбить строку на следующие разделители:

  • Двоеточие
  • Точка с запятой
  • Новая линия

Вы можете разделить строку следующим образом:

let rawElements = str.split(new RegExp('[,;\n]', 'g'));

Наконец, вам может понадобиться обрезать элементы в массиве:

let elements = rawElements.map(element => element.trim());

Ответ 7

Что делать, если мне нужно включить одну обратную косую черту в списке разделителей? Я пробовал '/\\/' так же, как '/\//', ни один из них не работал. Благодарю.