2014-11-24 1 views
0

Я хочу написать функцию, которая берет строку и возвращает массив с содержимым всех комментариев блока от него. Например:Как извлечь комментарии блока из строки, используя регулярные выражения?

var text = 'This is not a comment\n/*this is a comment*/\nNot a comment/*Another comment*/'; 
var comments = getComments(text); 

и «комментарии» будет массив со значениями:

['this is a comment', 'Another comment'] 

Я пытался с этим кодом:

function getComments(text) { 
    var comments, 
    comment, 
    regex; 

    comments = []; 
    regex = /\/\*([^\/\*]*)\*\//g; 
    comment = regex.exec(text); 

    while(comment !== null) { 
     skewer.log(comment); 
     comments.push(comment[1]); 
     comment = regex.exec(text); 
    } 

    return comments; 
} 

Проблема заключается в том, что если есть * или / в комментарии, не соответствует

ответ

0

Я обновил ваш код немного в this jsfiddle, удалив часть вспомогательного кода (например, вертел). Вот соответствующая часть:

function getComments(text) { 
    var comments, 
    regex, 
    match; 
    comments = []; 
    regex = /\/\*.*?\*\//g 

    while ((match = regex.exec(text)) != null) { 
     comments.push(match); 
    } 
    return comments; 
} 
+0

Это работает только с * most *, но не во всех случаях. Возьмите 'var a ="/* "; var b = "* /"; 'например - не следует извлекать комментарии. – nhahtdh

1

Я не уверен в части JavaScript, но это регулярное выражение должно соответствовать вашему шаблону: \/\*.*?\*\/

Смежные вопросы