Ответы пользователя по тегу Регулярные выражения
  • JS регулярные выражение как отформатировать правильно html?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    На регулярках это можно сделать примерно так:



    НО мой вам совет, никогда так не делайте!!!

    Для таких вещей уже давно придуман более верный способ, обычно заключающийся в следующей последовательности
    1. токенизация
    2. обработка токенов (замены/преобразования и прочее)
    3. сборка результата

    В общим гуглите парсинг и токенизация текстов в общем и html в частности
    Ответ написан
    4 комментария
  • Как правильно написать регулярное выражение (буквы, цифры и дефис)?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    if( /[^a-z0-9-]/.test(str) ){
       // валидация не пройдена
    }


    или так (но в этом варианте еще будет пропускать нижнее подчеркивание)
    if( /[^\w-]/.test(str) ){
       // валидация не пройдена
    }
    Ответ написан
    2 комментария
  • Как сформулировать regexp?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    var re = /\[(.*?)\]\s*\((http.*?)\)/g;
    var txt = '[катетер-направленному тромболизису] (https://www.radiologyinfo.org/en/info.cfm?pg=thrombo), но та, которая, помимо удаления тромбов, также открывает и усиливает слишком маленькие кровеносные сосуды через стенты или другие средства. Также может быть желательно увеличить их проницаемость, чтобы фиксаторы достигали паренхимы мозга по всему кровеносному сосуду, а не только на кончиках. Лазер может делать микроскопические дыры по всей длине, а затем, возможно, добавить [тонкий слой полиамида] (https://en.wikipedia.org/wiki/Thin-film_composite_membrane#Structure_and_materials)';
    
    var html = txt.replace(re,(a,b,c)=>{
       console.log("-------------\ntext:",b,"\nurl:",c);
       return `<a href='${c}'>${c}</a>`;
    });
    
    console.log("-------------\n",html);

    выхлоп в консоль

    -------------
    text: катетер-направленному тромболизису 
    url: https://www.radiologyinfo.org/en/info.cfm?pg=thrombo
    -------------
    text: тонкий слой полиамида 
    url: https://en.wikipedia.org/wiki/Thin-film_composite_membrane#Structure_and_materials
    -------------
     <a href='https://www.radiologyinfo.org/en/info.cfm?pg=thrombo'>https://www.radiologyinfo.org/en/info.cfm?pg=thrombo</a>, но та, которая, помимо удаления тромбов, также открывает и усиливает слишком маленькие кровеносные сосуды через стенты или другие средства. Также может быть желательно увеличить их проницаемость, чтобы фиксаторы достигали паренхимы мозга по всему кровеносному сосуду, а не только на кончиках. Лазер может делать микроскопические дыры по всей длине, а затем, возможно, добавить <a href='https://en.wikipedia.org/wiki/Thin-film_composite_membrane#Structure_and_materials'>https://en.wikipedia.org/wiki/Thin-film_composite_membrane#Structure_and_materials</a>

    Ответ написан
    Комментировать
  • Что означает выражение /some/ в JS?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Комментировать
  • Как записать в регулярном выражении любое количество любых символов?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    let re = new RegExp(variable + "=" + ".*?(?=&|$)");
    const result = url.replace(re, variable + "=" + newData);

    Но данный вариант далеко не идеален/
    я бы предпочел как то так:

    let url = 'http://localhost/?a=1&b=2&test=Y&clear=allcache';
    
    let re = /(\?|&)(.*?)\=(.*?)(?=&|$)/g;
    
    const newdata = {
       test: 333,
       clear: 4444
    };
    
    function changeURL(url, keys) {
       return url.replace(re, (a,prefix,key,val)=>{
         if( keys[key] )
           return prefix+key+"="+keys[key];
         return prefix+key+"="+val;
       });
    }
    
    url = changeURL(url, newdata);
    console.log(url);
    Ответ написан
    Комментировать
  • Какая нужна регулярка чтобы проверка проходила на номера одного оператора?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Одной регуляркой тут делать не правильно на мой взгляд, поэтому демонстрирую подход максимально развернуто.

    Для начала ознакамливаемся с международным форматом телефонных номеров

    А после немного кодим
    // функция разбирает телефонный номер на части и возвращает их для проверки
    function parsePhoneNumber(phoneNumberAsText){
      // через парамерт phoneNumberAsText функция получает текст содержащий номер телефона
      // предположим что обрабатываемое текстовое представление номера телефона
      // может принимать следующий вид (и имеет принадлежность к РФ):
      // "+7 (999) 888-77-55"
      // "8 (999) 888-77-55"
      // "+7 999 888-77-55"
      // "+7999888-77-55"
      // "+799988-777-55"
      // "+799988-77-555"
      // "+79998887755"
      // "89998887755"
      // и т.д.
    
    
      // убираем из него все лишнее
      var phone = "+"+phoneNumberAsText.replace(/^8/,"+7").replace(/[^0-9]/,""); 
    
      // составляем регулярку на основе международного формата телефонных номеров
      var re = /^(\+\d)(\d{3})(\d{7})$/;
    
      // получаем составные части нашего телефонного номера
      var [phone, country, code, number] = phoneNumber.match(re);
      // где:
      // phone - номер телефона в формате "+79998887766"
      // country - код страны (фикция, данный код будет работать для РФ и еще пары стран, поэтому считаем что тут всегда "+7")
      // code - трехзначный код региона/оператора
      // number - семизначный номер телефона в регионе/у оператора
    
      // возвращаем полученный результат разбора номера
      return {
        phone: phone, 
        country: country,
        code: code,
        number: number
      };
    }
    
    // парсим номер "8 (999) 888-77-66"
    var result = parsePhoneNumber("8 (999) 888-77-66");
    
    // на выходе в result получим объект вида
    // { phone: "+79998887766", country: "+7", code: "999", number: "8887766" }
    
    // предположим что у вас есть массив с нужными вам кодами регионов/операторов
    // allowCodes = ["999", "998" и т.д];
    
    // смотрим совпадает ли код региона/оператора с одним из кодов в allowCodes
    if( allowCodes.indexOf(result.code) ){
       console.log("Номер "+result.phone+" принадлежит искомой группе/региону/оператору")
    }else{
      console.log("Номер "+result.phone+" НЕ принадлежит искомой группе/региону/оператору")
    }
    Ответ написан
  • Как регуляркой проверять на пустоту?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Регулярка: /^$/

    Пример:
    var str1 = "";
    var str2 = "qwerty";
    var re=/^$/;
    
    console.log( re.test(str1) ); // true
    console.log( re.test(str2) ); // false
    Ответ написан
    4 комментария
  • Как получить скобки внутри которой запятая (regex)?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    var text = "(text) Lorem Ipsum is simply dummy, (text, simply) and (text, simply, qwerty) typesetting industry. Lorem Ipsum has been the[/m]";
    
    let result = text.match(/\([^)]+?(,[^)]+)+\)/g);
    
    console.log(result); // [ "(text, simply)", "(text, simply, qwerty)" ]


    Извините, лишнюю скобочку поставил, уже исправил.
    Ответ написан
    Комментировать
  • Как вырезать нужное из строки с помощью regex?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    var query = "filter[last_modified][at]=YYYYMMDD";
    var result = query.match(/^filter\[(.+?)\](\[(.+?)\])?/);
    if( result && result[1] )
       console.log("profit!", result[1], result[3]);
    Ответ написан
    2 комментария
  • Как сделать такую регулярку?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    преобразовать путь в регулярку

    PS: в качестве саморекламы)
    Ответ написан
    Комментировать
  • Определить самое длинное число в строке?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    2 комментария