javascript - 使用正则表达式可能会提高字符串解析的性能?

标签 javascript

我有这样一个字符串:

// string1
horse|cow|goat|zebra|

和另一个像这样的字符串:

// string2
horse:a,pig:b,cow:z,monkey:g,goat:a,

我的目标是拆分 string1,然后找出它在 string2 中出现的任何地方,以构建直方图。我目前正在这样做:

var histogram = {};

var animals = string1.split("|");
for (var i = 0; i < animals.length; i++) {
    var animal = animals[i];
    var animalColon = animal + ":";

    var index = string2.indexOf(animalColon);
    while (index != -1) {
        var indexColon = index + animalColon.length;
        var indexFinal = string2.indexOf(",", indexColon);
        var letter = string2.substring(indexColon, indexFinal);

        if (histogram[letter] == null) {
            histogram[letter] = 1;
        }
        else {
            histogram[letter] = histogram[letter] + 1;
        }
        index = string2.indexOf(animalColon, index + 1);
    }
}

最后,它可能会打印出如下内容:

// histogram:
a: 2 instances // from { horse, goat }
z: 1 instance  // from { cow }

上面的方法可行,但我必须 dp animals.length 通过 string2 来检查每个人。

有没有一种方法可以使用正则表达式来进行这种解析——本质上是并行运行所有测试,而不是进行多次传递?由于 string2 是 const,似乎所有检查都可以同时完成(不确定是否正则表达式是这样实现的)。

我将 string1 和 string2 中的元素数量增加了数千个元素,它仍然运行得相当快,但我担心机器速度较慢、可维护性等问题,

谢谢

最佳答案

我将从预处理您的 string2 开始,您说它是常量。使用一个对象比继续在字符串中搜索要好:

var s = "horse:a,pig:b,cow:z,monkey:g,goat:a";
var hash = {};
var tokens = s.split(',');
for(var i=0;i<tokens.length;i++){
    var a = tokens[i].split(':');
    hash[a[0]] = a[1];
}

下一步,当你得到字符串时,你可以更容易地查找字母(你可能还想检查 if(letter),如果你在 string1 中得到一个新的动物):

var histogram = {};
var string1 = "horse|cow|goat|zebra";
var animals = string1.split("|");
for(var i=0;i<animals.length;i++){
    var letter = hash[animals[i]];
    if (!histogram[letter])
        histogram[letter] = 0;
    histogram[letter]++;
}

根据你的问题,你可能会滥用正则表达式来计算字母,但它不是平行的,但充其量是线性的,而且可能足够复杂而不值得。

关于javascript - 使用正则表达式可能会提高字符串解析的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3437772/

相关文章:

javascript - Internet Explorer EDGE 兼容性问题?

javascript - CSS3 跳跃动画?

javascript - 一页中的 jquery 表单验证和 php 脚本

javascript - 如何删除字符串的某些部分

javascript - 动态添加和删除帖子标题

javascript - Hammer JS 似乎不起作用

javascript - datepicker 禁用 future 日期并将今天日期显示为默认日期

javascript - React Router 开关组件匹配

javascript - Node.js 中的 +new Date 语法是什么

javascript - 使用 vue router reactive 使查询参数