Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Регулярное выражение , все что между знаками *

#javascript #регулярные_выражения


Есть комментарии в коде: 

/* /templates/images/icon.png */


как с помощью RegExp выбрать все что между звездочками, + сами звездочик со слешами: 



пути будут разные только по длине, могу цифры попадаться.

([/*-*/])\w+ - так не получается
    


Ответы

Ответ 1



Лучший вариант этого выражения — развернутый (?s)\/\*.*?\*\/, который выглядит как /\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//g См. демо регулярного выражения. Подробности: \/\* - начало комментария /* [^*]*\*+ - 0+ знаков, отличных от *, за которыми следует 1+ згаков * (?:[^\/*][^*]*\*+)* - 0+ последовательностей: [^\/*][^*]*\*+ - символ, отличный от / и *, за которым следует 0+ знаков, отличных от звёздочки, за которыми следует 1+ звёздочек \/ - закрывающий знак /. Минус только в том, что если нужно получить только то, что между /* и */, нужно будет убрать последнюю букву с помощью, например, substr. var regex = /\/\*([^*]*\*+(?:[^\/*][^*]*\*+)*)\//g; var str = "/* /templates/images/icon.png */\n/* /templates/images/icon.png \n* Тут тоже бывает текст\n*/"; while (m = regex.exec(str)) { console.log("Полное совпадение: " + m[0]); console.log("Без /* и */: "+m[1].substring(0,m[1].length-1).trim()); }

Ответ 2



Например, так : \/\*.*\*\/

Ответ 3



Не ясно, по какому принципу вы строили вашу регулярку, так должно работать. console.log("asdsa/* /templates/images/icon.png */cvsdv".match(/\/\*.*\*\//)[0])

Ответ 4



если в файле множество таких строк тогда можно сделать таким образом var str = "/* /templates/images/icon.png */ /* /templates/lol/icon.png */"; var reg = /\/\*(.*?)\*\//g; var l = str.match(reg).length; for(var i = 0;i

Ответ 5



Основная проблема этой задачи - правильное экранирование: /\/\*.*\*\//g let str = 'before/* /templates/images/icon.png */after'; console.log(str.match(/\/\*.*\*\//g)) Задачу экранирования можно решить отдельно: function e(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); } let str = `before/* \n /templates/images/icon.png */after/***/`; let regex = new RegExp(e('/*')+'[\\w\\W]*?'+e('*/'), 'g') console.log(str.match(regex), regex)

Ответ 6



Если могут быть многострочными: /\/\*[\s\S]*?\*\// Если только однострочные: /\/\*.*?\*\//

Комментариев нет:

Отправить комментарий