Строка JavaScript, разделенная на подстроки результатов Regex, содержит пустые фрагменты - PullRequest
0 голосов
/ 24 мая 2011

У меня есть следующий код JavaScript для разделения строк:

var formula = "(field1 + field2) * (field5 % field2) / field3";
console.log(formula.split(/[+(-)% *\/]/));

И результат превзошел все ожидания:

["", "field1", "", "", "field2", "", "", "", "", "field5", "", "", "field2", "", "", "", "field3"]

Какой будет желаемый результат:

["field1", "field2", "field5", "field2", "field3"]

Я использую официальный релиз Google Chrome 11 в качестве браузера для тестирования, пожалуйста, сообщите, что я делаю не так.

Спасибо!

William

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Вместо разделения на /[+(-)% *\/]/ разделить на несколько: /[+(-)% *\/]+/. Вы все еще можете получить пустые совпадения в начале и в конце. Чтобы решить эту проблему, вы можете использовать аналогичное регулярное выражение с заменой:

formula.replace(/^[+(-)% *\/]+|[+(-)% *\/]+$/g, "").split(/[+(-)% *\/]+/)

So

var formula = "(field1 + field2) * (field5 % field2) / field3";
console.log(formula.replace(/^[+(-)% *\/]+|[+(-)% *\/]+$/g, "").split(/[+(-)% *\/]+/));

выходы

field1,field2,field5,field2,field3
0 голосов
/ 24 мая 2011

Вы разделяетесь на каждого из этих персонажей. Если вы разделите их по группам, вы получите желаемый результат.

console.log(formula.split(/[+(-)% *\/]+/));

Есть только одна загвоздка: вам придется вручную вырезать эти символы из начала и конца строки (или вытолкнуть пустую строку в начале / конце) - вы не сможете справиться только на split.

...