【问题标题】:Plain Javascript Split String UPPER from lower case纯Javascript从小写字母拆分字符串UPPER
【发布时间】:2018-01-29 10:49:03
【问题描述】:

我正在尝试在 Javascript (ES5) 中拆分包含大写部分 + 小写部分的字符串。字符串总是看起来像“UPPERlower”。

这是我目前使用的

"ABCabc".match(/^[A-Z]+/g).concat("ABCabc".match(/[a-z]+$/g)) //result is ["ABC", "abc"]

有没有更简洁的代码来实现这一点?

编辑: Ori Drori 的回答和 mplungjan 的回答对于我的问题都是正确的。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以使用| 匹配大写或小写序列:

    var result = "ABCabc".match(/[A-Z]+|[a-z]+/g)
    
    console.log(result);

    【讨论】:

    • 这就像一个魅力,我认为 mplungjan 的答案是一个更好的解决方案(如果我错了,请纠正我)
    • @Frozzem - 任何让你开心的东西 :)
    • 如果句子中有例如 abcABC,这将在多个单词上失败
    • 字符串总是看起来像“UPPERlower”。
    • 如果是这样,那么匹配似乎更直接(返回一个数组)
    【解决方案2】:

    解构是现代的方式

    const s="UPPERlower";
    let [,upper, lower] =/([A-Z]+)([a-z]+)/g.exec(s);
    console.log(upper,lower);

    循环 - 注意:What is the difference between RegExp’s exec() function and String’s match() function?

    const s = "UPPERlower UPlow 123 lowUP UPPlowe"; 
    // Note:above will produce low UP using .match(/[A-Z]+|[a-z]+/g) instead of capturing
    const re = /([A-Z]+)([a-z]+)/g;
    while (match = re.exec(s)) {
      [, upper, lower] = match;
      console.log(upper, lower)
    }

    旧方法:

    var parts=/([A-Z]+)([a-z]+)/g.exec("UPPERlower");
    console.log(parts[1],parts[2]);

    【讨论】:

    • 谢谢这个作品,虽然我真的不明白你通过使用 let [, upper, lower] 实现了什么?您是否正在创建一个数组,如 [null,正则表达式第一部分的值,正则表达式第二部分的值]?
    • 我创建 vars 并忽略 exec 的第一个元素:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    • 哇,我不知道那是一回事,谢谢你:)。但是我给了 Ori Drori 的正确答案,因为它是纯 ES5(我知道 const 并且 let 很容易被替换),对于 ES6,这绝对是正确的答案,所以我在我的问题中添加了一条评论,链接到 ES6 答案跨度>
    • 我添加了一个使用更多向后兼容 JS 的示例 - 我的 exec 与 .match 没有太大区别
    • 嗯,所以如果我有一个简单的正则表达式匹配很好,但如果我有一个复杂的正则表达式 exec 会更好吗?还是说 1 比另一个有真正的优势?
    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 2021-03-10
    • 1970-01-01
    • 2011-05-28
    • 2013-03-12
    • 2020-03-10
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多