2014-11-12 3 views
0

Я пытаюсь разобрать следующие данные, перейдя через каждую матчи, но выражение захватывает первый [FILE] весь путь до последнего [/ FILE]. Я хочу, чтобы он повторял каждый собственный тег.Regex для синтаксического анализа и создания нескольких пользовательских тегов

данных:

"[FILE]file_1.png[/FILE]<br /><br /><br />[FILE]file_2.png[/FILE]" 

Результаты:

file_1.png<br /><br /><br />file_2.png` 

.

var urlRegex = /(\[FILE\]).*(\[\/FILE\])/ig; 
    text = text.replace(urlRegex, function(url) { 

     url = url.replace(/\[.?FILE\]/ig, ""); 

     var path = "./uploads/" + $('#CURRENT_FOLDER_UID').val() + "/"; 
     var res = ""; 

     arr = url.split("."); 
     ext = (arr[arr.length - 1]).toLowerCase(); 

     if (img.indexOf(ext) > -1) { 
      //url = encodeURI(url); 
      res = '<img src="' + path + encodeURI(stripHTML(url)) + '" />'; 
     } else { 
      res = '<a href="' + path + encodeURI(stripHTML(url)) + '" target="_blank">' + url + '</a>'; 
     } 

     return res; 
    }); 

ответ

1
(\[FILE\]).*?(\[\/FILE\]) 

Попробуйте this.Make ваш * не жадный, поставив ? после него. * жадный по умолчанию. Он будет до последнего `[/ FILE]

Вы также можете попробовать \[FILE\]|\[\/FILE\].

См. Демонстрационную версию.

http://regex101.com/r/kP8uF5/4

var re = /\[FILE\]|\[\/FILE\]/gm; 
var str = '[FILE]file_1.png[/FILE]<br /><br /><br />[FILE]file_2.png[/FILE]'; 
var subst = ''; 

var result = str.replace(re, subst); 
+0

Выглядит это сделал ... ничего себе. Спасибо за быстрый ответ. Я тестирую немного больше и, вероятно, отвечу на это. – kenyu73

+1

Вы можете принять его сейчас, так как он прав. '' 'Делает 'матч X, за которым следует что-либо, а затем Y' не-жадный. По умолчанию «соответствие X, за которым следует все, за которым следует Y», соответствует все, что находится между первым «X» и последним вложением «Y», в то время как '?' Сообщает движку regex остановиться при первом результате. –