所以我在我的角度应用中使用filter
。此过滤器接受一个字符串并将其转换为文本。我在这个过滤器中有多个规则,因为每个字符串都是不同的。我逐步定义了这些规则,如下所示:
.filter('filter', function () {
return function (item) {
var space = item.replace(/\./g, " ");
var result = space.replace(/([A-Z])/g, " $1");
var ids = result.replace(/Id==/g, " ");
var categories = ids.replace(/Id=in=\(/g, ' ');
var text = categories.replace(/title==/g, 'title: ');
var desc = text.replace(/description==/g, 'description: ');
var dots = desc.replace(/\*/g, ' ');
var parants = dots.replace(/\)/g, ' ');
var commas = parants.replace(/\,/g, '');
var equal = commas.replace(/=/g, '');
var more = equal.replace(/>/g, '');
var line = more.replace(/-/g, '');
var semidots = line.replace(/:/g, '');
var numbers = semidots.replace(/[0-9]/g, '');
var final = numbers.replace(/Z/g, '');
return final.charAt(0).toUpperCase() + final.slice(1)
}
})
这是字符串
的示例title==*test*;description==*some%20desciption*;eventTypeId==10;studyId==99999;priorityId==2;severityId==3;occuredDate%3E=2016-09-01T04:00:00.000Z
最终结果非常好,看起来像:
我确信这段代码可以更简单,但我在正则表达式方面不是很好,所以我的问题是,如何让这个正则表达式规则更简单美观? 我感谢任何帮助。
使用我的示例
,这很简单plunker答案 0 :(得分:1)
它仍然需要一些层次,但可以大大简化这一点:
return function(item) {
var replaced = item.replace(/([A-Z])/g, " $1")
.replace(/(title|description)==/g, "$1: ")
.replace(/Id=(?:in)?=|[.*()]/g, " ")
.replace(/[\d=>:Z,-]/g, "")
return replaced.charAt(0).toUpperCase() + replaced.slice(1)
}
我可能错过了一两个条件,但这是一般的想法。
答案 1 :(得分:1)
您可以使用字符类和OR |
语句压缩许多正则表达式语句。
还有一些可以合并的陈述。
function filter(item) {
item = item.replace(/[.)*]|(?:Id)?==/g, ' ')
.replace(/[,=:>Z\d-]/g, '')
.replace(/[A-Z]/g, ' $&');
return item.charAt(0).toUpperCase() + item.slice(1);
}
var str = 'title==*test*;description==*some%20desciption*;eventTypeId==10;studyId==99999;priorityId==2;severityId==3;occuredDate%3E=2016-09-01T04:00:00.000Z';
console.log(filter(str));

答案 2 :(得分:1)
除了处理复杂的正则表达式之外,您可以采取的一种方法是管理按顺序应用的突变列表。
function filter(item){
var replacements = [];
replacements.push([/\./g, " "]);
replacements.push([/([A-Z])/g, " $1"]);
replacements.push([/Id==/g, " "]);
replacements.push([/Id=in=\(/g, ' ']);
replacements.push([/title==/g, 'title: ']);
replacements.push([/description==/g, 'description: ']);
replacements.push([/\*/g, ' ']);
replacements.push([/\)/g, ' ']);
replacements.push([/\,/g, '']);
replacements.push([/=/g, '']);
replacements.push([/>/g, '']);
replacements.push([/-/g, '']);
replacements.push([/:/g, '']);
replacements.push([/[0-9]/g, '']);
replacements.push([/Z/g, '']);
for (var x = 0, r = replacements[0];
x < replacements.length;
r = replacements[++x])
item = item.replace(r[0], r[1]);
return item.charAt(0).toUpperCase() + item.slice(1)
}
var items = 'title==*test*;description==*some%20desciption*;eventTypeId==10;studyId==99999;priorityId==2;severityId==3;occuredDate%3E=2016-09-01T04:00:00.000Z'.split(';');
console.log(items.map(filter));