javascript - 简化一系列基于正则表达式的字符串替换

标签 javascript angularjs regex

所以我在我的 Angular 应用程序中使用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

最终结果足够好,如下所示:

example of filter applied

我确信这段代码可以更简单,但是我不太擅长正则表达式,所以我的问题是,如何使这个正则表达式规则更简单和美观? 我感谢任何帮助。

这很简单plunker以我的例子

最佳答案

除了处理复杂的正则表达式之外,您可以采取的一种方法是管理按顺序应用的突变列表。

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));

关于javascript - 简化一系列基于正则表达式的字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39419475/

相关文章:

javascript - CSS/JS/Jquery 中的 SVG 发光效果

javascript - Angularjs 最小长度验证停止字符计数器

javascript - 如何在 Google map 之外点击图钉上的位置详细信息

java - 获取 Group 与 Asterisk 的匹配项?

javascript - 正则表达式 - 忽略带有多个捕获的注释 xml 行

javascript - Angularjs:使用数据动态加载 View 中的指令

javascript - 我怎样才能得到点击按钮的动态值 id 或 data 属性

javascript - 如何创建类来获取 javascript

javascript - 在 AngularJS 中是否有像finally这样的东西在$http之后运行?

java - 如何用java进行文本处理