AngularJS:正则表达式没有重复错误

时间:2015-07-07 07:27:41

标签: javascript regex angularjs angularjs-directive

我正在尝试替换一些单词(我的rootcope数据数组中的所有单词)以添加工具提示。

我的代码:

public struct JSON {

    public enum Type : Int {

        case Number
        case String
        case Bool
        case Array
        case Dictionary
        case Null
        case Unknown

        public static func evaluate(object: AnyObject) -> Type {

            switch object {
            case let dictionary as [String : AnyObject]: // this lines supply error. Use of undefined type String
                return .Dictionary
            default:
                return .Unknown
            }
        }

    } // enum Type

它不起作用!我有一个错误。

错误是:

.directive('replaceDirective', function($rootScope, $compile) {
    return {
        restrict: 'A',
        replace: true,
        link: function(scope, element, attrs) {

            //For exemple
            //$rootScope.data = ["word1", "word2", "word3", etc..]; 

            var test = {
                getTest: function(e, word) {
                    return RegExp(e.toString().replace(/\bxx\b/g, "").replace(/xx/g, word), "g")
                }
            };

            scope.$watch(attrs.replaceDirective, function(html) {
                for (var i=0; i<$rootScope.data.length; i++) {
                    var tooltipWord = $rootScope.data[i].word;
                    var tooltipDescription = $rootScope.data[i].def;
                    var template = '<a data-html="true" class="tooltip" title="' + tooltipDescription + '" data-toggle="tooltip" data-placement="top" tooltip>' + tooltipWord + '</a>';

                    var oldRegex = /\bxx\b/;
                    html = html.replace(test.getTest(oldRegex, tooltipWord), template);
                }

                element.html(html);
                $compile(element.contents())(scope);
            });
        }
    };
});

1 个答案:

答案 0 :(得分:0)

问题在于形成动态正则表达式部分。当您在另一个量词,锚或交替运算符之后设置量词时,会出现“无需重复”错误。

所以,也许,你的正则表达式开始看起来像(text)*+(a|?b)*\s+

要解决此问题,请在测试之前确保在正则表达式中escape the metacharacters

function escapeRegExp(str) {
  return str.replace(/[\[\]\/{}()*+?.\\^$|-]/g, "\\$&");
}

getTest: function(e, word) {
 return RegExp(escapeRegExp(e.toString().replace(/\bxx\b/g, "").replace(/xx/g, word)), "g")
}