gpt4 book ai didi

javascript - 使用正则表达式分隔单词

转载 作者:行者123 更新时间:2023-12-02 16:00:25 24 4
gpt4 key购买 nike

我试图得到这个结果:“夏天来了”。为什么下面的代码会生成额外的空格? (当前结果:“-夏天--是- -这里-”)。

function spinalCase(str) {
var newA = str.split(/([A-Z][a-z]*)/).join("-");
return newA;
}

spinalCase("SummerIs Here");

最佳答案

您正在使用各种split,其中正则表达式包含一个捕获组(括号内),它具有特定含义,即在结果中包含所有拆分字符串。所以你的结果就变成了:

["", "Summer", "", "Is", " ", "Here", ""]

将其与 - 连接即可得到您所看到的结果。但是您不能只从正则表达式中删除不必要的捕获组,因为这样拆分会给您

["", "", " ", ""]

因为您正在分割零宽度字符串,由于正则表达式中的 * 。所以这实际上不起作用。

如果您想使用分割,请尝试分割零宽度或仅空格的匹配向前的大写字母:

> "SummerIs Here".split(/\s*(?=[A-Z])/)
^^^^^^^^^ LOOK-AHEAD
< ["Summer", "Is", "Here"]

现在你可以加入它来获得你想要的结果,但没有小写映射,你可以这样做:

"SummerIs Here" .
split(/\s*(?=[A-Z])/) .
map(function(elt, i) { return i ? elt.toLowerCase() : elt; }) .
join('-')

这会给你想要的东西。

按照另一个答案中的建议使用replace也是一个完全可行的解决方案。就最佳实践而言,请考虑 Ember 中的以下代码:

var DECAMELIZE_REGEXP = /([a-z\d])([A-Z])/g;
var DASHERIZE_REGEXP = /[ _]/g;

function decamelize(str) {
return str.replace(DECAMELIZE_REGEXP, '$1_$2').toLowerCase();
}

function dasherize(str) {
return decamelize(str).replace(DASHERIZE_REGEXP, '-');
}

首先,decamelize 在小写字母(或数字)和大写字母的两个字符序列之间添加下划线 _。然后,dasherize 将下划线替换为破折号。除了将字符串中的第一个单词小写之外,这工作得很好。您可以在此处将 decamelize 和 dasherize 与

结合起来
var SPINALIZE_REGEXP = /([a-z\d])\s*([A-Z])/g;

function spinalCase(str) {
return str.replace(SPINALIZE_REGEXP, '$1-$2').toLowerCase();
}

关于javascript - 使用正则表达式分隔单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31258701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com