#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]*?\*\// Если только однострочные: /\/\*.*?\*\//
Комментариев нет:
Отправить комментарий