Я использую функцию split, чтобы разделить мою строку /value/1
var value = "/value/1/";
var arr = value.split("/");
В результате я получу массив с 4 элементами "", "value", "1", ""; Но мне действительно нужны непустые значения в выходном массиве. Есть ли способ создать базу массива для моей входной строки, но массив без пустых элементов?
Моя строка может быть /value/1/
/value/1
/value/
/value
в основном я прецессирую http request.url
.
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>');
Попробуйте использовать Array#filter
,
var arr = value.split("/").filter(function (part) { return !!part; });
Или ту же более короткую версию, что и Tushar .
var arr = value.split("/").filter(Boolean);
Если вы все еще хотите использовать String для сопоставления символа, вы можете попробовать использовать: RegExp("/", "g")
- но это не лучший случай, если вы все еще хотите не сопоставлять экранированный символ \
и предоставить некоторый API для использования. Вы можете использовать пользователя RegExp("[^\/]*", "g")
или /[^\/]*/g
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.