Я использую функцию split, чтобы разделить мою строку /value/1

var value = "/value/1/";

var arr = value.split("/");

В результате я получу массив с 4 элементами "", "value", "1", ""; Но мне действительно нужны непустые значения в выходном массиве. Есть ли способ создать базу массива для моей входной строки, но массив без пустых элементов?

Моя строка может быть /value/1/ /value/1 /value/ /value в основном я прецессирую http request.url.

5
sreginogemoh 19 Дек 2015 в 16:09

3 ответа

Лучший ответ

Вы можете использовать match с регулярным выражением.

str.match(/[^\/]+/g);

Регулярное выражение [^\/]+ будет соответствовать любому символу, который не является косой чертой.

function getValues(str) {
  return str.match(/[^\/]+/g);
}

document.write('<pre>');
document.write('<b>/value/1/</b><br />' + JSON.stringify(getValues('/value/1/'), 0, 4));
document.write('<br /><br /><b>/value/1</b><br />' + JSON.stringify(getValues('/value/1'), 0, 4));
document.write('<br /><br /><b>/value/</b><br />' + JSON.stringify(getValues('/value/'), 0, 4));
document.write('<br /><br /><b>/value</b><br />' + JSON.stringify(getValues('/value'), 0, 4));
document.write('</pre>');
6
Tushar 19 Дек 2015 в 13:16

Попробуйте использовать Array#filter,

var arr = value.split("/").filter(function (part) { return !!part; });

Или ту же более короткую версию, что и Tushar .

var arr = value.split("/").filter(Boolean);
10
Louay Alakkad 19 Дек 2015 в 13:13

Если вы все еще хотите использовать String для сопоставления символа, вы можете попробовать использовать: RegExp("/", "g") - но это не лучший случай, если вы все еще хотите не сопоставлять экранированный символ \ и предоставить некоторый API для использования. Вы можете использовать пользователя RegExp("[^\/]*", "g") или /[^\/]*/g

0
Ramziddin Makhmudov 20 Дек 2015 в 09:08