匹配两个给定标记内的所有文本

时间:2016-02-01 23:03:26

标签: javascript regex replace

假设我有两个自定义的javascript评论。

打开://<!-并关闭://!>

我想替换这些标记之间的所有内容,以及标记。

//<!- directiveDecoratorComment
    (function directiveDecorator() {
        if (typeof(angular) == 'undefined') return;
        var appElement = document.querySelector('[ng-app]');
        var appName = appElement.getAttribute('ng-app');
        if (typeof(appName) == 'undefined') return;
        var app = angular.module(appName);
        angular.forEach(app._invokeQueue, function(value, key) {
            if (value[1] == 'directive') {
                var directiveName = value[2][0];
                app.config(function($provide) {
                  $provide.decorator(directiveName + 'Directive', function($delegate) {
                    var directive = $delegate[0];
                    console.log("Decorating:",directiveName,'on',appName,'template now ==',"/views/" + directive.templateUrl);
                    directive.templateUrl = "/views/" + directive.templateUrl;
                    return $delegate;
                  });
                });
            }
        });
    }());

    //!>

所以这基本上会成为空字符串javascript文件。

这是我尝试过的。

string.replace(/([//<])(.+\n*?)([//!>])/g, '');

3 个答案:

答案 0 :(得分:1)

您可以使用

/(\/\/<!-)([^\/]*(?:\/(?!\/!>)[^\/]*)*)(\/\/!>)/g

请参阅regex demo

正则表达式基于 unroll-the-loop 技术。

  • (\/\/<!-) - 匹配并捕获文字//<!-
  • ([^\/]*(?:\/(?!\/!>)[^\/]*)*) - 匹配并捕获//!>以外的任何内容(在此处展开​​循环意味着我们匹配/[^\/]*之外的任何字符,然后匹配零个或多个{ {1}} /之后没有跟随/!>
  • 的任何数字
  • / - 匹配并捕获(\/\/!>)

请注意,如果您没有使用它们,可以删除捕获组。

答案 1 :(得分:0)

你想要的是这个:

string.replace(/(\/\/\<\!\-)((.*\n)*.*)(\/\/\!\>)/, '')

答案 2 :(得分:0)

你可以在没有前瞻的情况下使用非贪婪的匹配来做到这一点:

/\/\/<!-[\s\S]*?\/\/!>/
 ^^^^^^^                    MATCH OPENING //<!-
        ^^^^^^^             ANYTHING IN BETWEEN
               ^^^^^^^      CLOSING //!>

\s\S是为了匹配换行符。