В PHP существует довольно удобный метод для проверки сочетания «0», «false», «off» как «false» и «1», «on», «true» как == true, который часто игнорируется , Это особенно полезно для разбора аргументов GET / POST:
filter_var( $item['price'], FILTER_VALIDATE_BOOLEAN );
Это не относится к этому случаю использования, но при условии сходства и факта, что это результат поиска, как правило, возникает при задании вопроса о проверке ( string) «0» как false Я думал, что это поможет другим.
Если у вас есть группа захвата ((...)
) в регулярном выражении, которое вы передаете .split
, захваченный текст возвращается как часть результата. Вот почему у вас есть "1"
, "2"
и т. Д. Между "Item "
.
Помимо некоторого варианта решения @Ori Dori , вы также можете решить это с помощью прогнозного утверждения (?=...)
, которое является не захватывающей конструкцией.
var string = 'Item 1Item 2Item 3Item 4Item NItem N-1';
var arr = string.split(/(?=Item)/);
console.log(arr);
Это будет работать, разбивая строку непосредственно перед любым появлением текста "Item"
.
Для более грубого решения без использования регулярных выражений:
var string = 'Item 1Item 2Item 3Item 4Item NItem N-1';
var arr = [];
var i = string.indexOf('Item', 1);
while (i >= 0) {
arr.push(string.substr(0, i));
string = string.substr(i);
i = string.indexOf('Item', 1);
}
arr.push(string);
console.log(arr);
Примечание: ответ обрабатывает исходный регистр - перед обновлением
Используйте String.match()
, чтобы найти последовательность не чисел, которая заканчивается последовательностью числа ( regex101 ):
var string = 'Item 1Item 2Item 3Item 4'
var arr = string.match(/\D+\d+/g)
console.log(arr);
Чтобы достичь ожидаемого результата, используйте опцию ниже с заменой, разбиением и нарезкой
var str = "Item 1Item 2Item 3Item 4Item NItem N-1"
let arr = str.replace(/\I/g, ' I').split(' ').slice(1);
console.log(arr)
codepen - [111 ] https://codepen.io/nagasai/pen/qLzKwJ?editors=1010
Если ваш elements
всегда начинается со слова Item
, вы можете сделать что-то подобное, используя split () :
const str = 'Item 1Item 2Item 3Item 4Item N-2Item N-1Item N'
var arr = str.split("I").slice(1).map(x => "I" + x);
console.log(arr);
[1114 ] Еще лучше, и в качестве альтернативы вы можете сделать это с помощью одного регулярного выражения, используя match ()
const str = 'Item 1Item 2Item 3Item 4Item 999Item N-2Item N-1Item N'
var arr = str.match(/Item\s[1-9|N|-]+/g);
console.log(arr);
[ 1115]