#javascript #регулярные_выражения
В общем, нужно вывести из строки id пользователя до запятой. В данном коде выводит "id50,", надо только "50". Как?) text = 'id50, 4124fdgfgdfg'; if(text.match('id[0-9].*,')){ komy = text.match('id[0-9].*,'); alert(komy); }
Ответы
Ответ 1
С помощью регулярного выражения ^id(\d+),.*$ (захватывается число в скобках после id, и до запятой). Можно сразу захватить и вторую часть (4124fdgfgdfg), таким выражением: /^id(\d+), (.*)$/. Рабочий пример: str = 'id42, 4124fdgfgdfg'; if (m = str.match(/^id(\d+), (.*)$/)) { console.log(m[1], m[2]) } Дает в консоль (можете нажать кнопку "Выполнить код" для проверки): 42 4124fdgfgdfg Здесь хорошее описание match на русском: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/match Здесь https://regex101.com/ вы можете онлайн поиграть с регулярными выражениями и сразу видеть результат. Вот ваш пример с тестами и комментариями: https://regex101.com/r/nX1rF5/2Ответ 2
Вариантов куча: Можно поправить само выражение и будет работать: // (?<=id) - смотрит позитивно назад, но не берёт в результат // (?=,) - смотрит позитивно вперёд, но не берёт в результат // + перед выражением пытается привести результат к Number // // Вернётся либо ["50"], либо null; // массив с одним элементом попытается привести первый элемент // null станет 0 // Используйте эти знания на благо Вашей проверки :) console.info(+/(?<=id)\d*(?=,)/.exec('id50, 4124fdgfgdfg')); // 50 Можно, конечно, использовать старые, добрые группы (можно даже именованные сделать): // С помощью тернарного оператора проверяем на null // Если null - вернём 0 // Если есть результат - приводим к Number 1 элемент (в 0 - всё совпадение, т. е. id50,) console.info((r = /id(\d*),/.exec('id50, 4124fdgfgdfg')) ? +r[1] : 0); // 50 Можно извращаться типа String.prototype.split заюзать, где с помощью тех же групп сохраняется номер, но зачем использовать ножовку для забивки гвоздей?Ответ 3
При match или exec придётся использовать дополнительные проверки, иначе возможна ошибка Cannot read property '1' split либо найдёт, либо нет (undefined) text = 'id50, 4124fdgfgdfg'; t = text.split(/id(\d+), (.*)/); console.log(t[1], t[2]);Ответ 4
text = ' id50, 4124fdgfgdfg'; console.log(text.replace(/id(\d+)\s*,.*|./gi, '$1')) text = ' id50, 4124fdgfgdfg id100,'; console.log(text.replace(/id(\d+)\s*,.*|./gi, '$1')) text = ' id, 4124fdgfgdfg'; console.log(text.replace(/id(\d+)\s*,.*|./gi, '$1'))Ответ 5
Никак, но можно так (вместе с id): /id\d[^,]*/
Комментариев нет:
Отправить комментарий