Метод split() + RegExp

408
23 ноября 2017, 05:12

Всем привет! Задача разбить строку '156.75m^2' на массив через регулярку. Мой код

var reg = /(\d+)(\.)?(\d+)?(m)(\^)(2)/,
str = '156.75m^2',
mas = str.split(reg);

Работает все хорошо, но почемута первый и последний елемент массива это пустая строка!

["", "156", ".", "75", "m", "^", "2", ""]

Почему так происходит и как это исправить? Всем спасибо!

Answer 1

Например так:

var reg = /(\d+)(\.)?(\d+)?(m)(\^)(2)/, 
str = '156.75m^2', 
mas = reg.exec(str); 
 
console.dir(mas);

При выполнении RegExp.exec() нулевой элемент всегда исходная строка. Если она не нужна, добавьте mas = mas.slise(1);

Answer 2

String#split() разбивает строку по шаблону, т.е. в результирующий массив добавляются подстроки между совпадениями, включая пустые строки в начале/конце и между совпадениями. К тому же, при использовании захватывающих подмасок захваченные подстроки тоже добавляются в конечный массив, что иногда необходимо, но не в данном случае. Тут нужно использовать String#match или RegExp#exec и удалить первый элемент массива, если совпадение было найдено:

var reg = /(\d+)(\.)?(\d+)?(m)(\^)(2)/; 
var str = '156.75m^2'; 
var mas = reg.exec(str); // Находим первое совпадение 
if (mas) { 
  mas = mas.slice(1); // Удаляем первый элемент, полное совпадение 
} 
console.log(mas);

READ ALSO
Как запустить сторонний код на Wordpress

Как запустить сторонний код на Wordpress

Есть код калькулятора который надо вставить на определенную страницу WordPressПри установке - он не работает

355
window.onload = function работает только в отладчике

window.onload = function работает только в отладчике

Подскажите COMPADRES, где-то налажал

291
Меняем Background через javascript

Меняем Background через javascript

На сайте несколько dropdown селекторов, каждое из выбранных селекторов сохроняю в сессиюТак же нужно менять background самого селектора у которого...

300
Как написать по новому стандарту es6?

Как написать по новому стандарту es6?

Не могу разобраться в рендеринг, застрял в авторизации, что как пишу я так не рендерит, выходит ошибка

338