【问题标题】:JavaScript Split string by multiple occurrences of lettersJavaScript 通过多次出现的字母拆分字符串
【发布时间】:2014-03-26 16:28:57
【问题描述】:

我正在尝试通过单个或多个出现的字母来拆分字符串。

例如:

aaabbcapppp,将产生数组,["aaa", "bb", "c", "a", "pppp"]

我想到的最低效的想法就是利用newArray = str.split(""); 并根据我的需要重建阵列。我认为有一个更有效的解决方案。

【问题讨论】:

标签: javascript regex string split


【解决方案1】:

这样的事情会起作用:

"aaabbcapppp".match(/(.)\1*/g) // ["aaa", "bb", "c", "a", "pppp"]

(.) 匹配第 1 组中捕获的任何单个字符,然后是重复零次或多次的相同字符(\1 是与第 1 组中匹配的完全匹配的反向引用)。

要仅匹配拉丁字母,请考虑使用[a-z],例如:

"aaa-bbca!!pppp".match(/([a-z])\1*/g) // ["aaa", "bb", "c", "a", "pppp"]

这里,-!! 不包含在结果数组中。

【讨论】:

    【解决方案2】:

    正则表达式解决方案可能是要走的路,但如果出于某种原因您想手动执行,类似这样的方法会起作用

    function charSplit(str) {
        var arr = [], l, j = -1;
        for (var i=0; i<str.length; i++) {
            var c = str.charAt(i);
            l==c ? arr[j] += c : arr[++j] = c;
            l=c;
        }
        return arr;
    }
    

    FIDDLE

    【讨论】:

    • +1 似乎可以通过在运行中找到第一个和最后一个字符的索引然后执行子字符串而不是连接来改善这种情况。不过我喜欢。
    • @p.s.w.g - 谢谢,+1。是的,它可能会被改进,但这就像我能得到的一样简单,我什至为了好玩而缩小了它 -> jsfiddle.net/MJQM8/1
    猜你喜欢
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多