Всем привет! Задача разбить строку '156.75m^2' на массив через регулярку. Мой код
var reg = /(\d+)(\.)?(\d+)?(m)(\^)(2)/,
str = '156.75m^2',
mas = str.split(reg);
Работает все хорошо, но почемута первый и последний елемент массива это пустая строка!
["", "156", ".", "75", "m", "^", "2", ""]
Почему так происходит и как это исправить? Всем спасибо!
Например так:
var reg = /(\d+)(\.)?(\d+)?(m)(\^)(2)/,
str = '156.75m^2',
mas = reg.exec(str);
console.dir(mas);
При выполнении RegExp.exec() нулевой элемент всегда исходная строка. Если она не нужна, добавьте mas = mas.slise(1);
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);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости