我正在尝试替换一些单词(我的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);
});
}
};
});
答案 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")
}