gpt4 book ai didi

javascript - 缩短 Javascript 函数

转载 作者:可可西里 更新时间:2023-11-01 02:14:54 27 4
gpt4 key购买 nike

我自己编写了一个将字符串转换为缩写的函数,它目前相当长并且区分大小写。

我需要一种方法来缩短它,以便它在 100% 的时间内都能正常工作。目前,如果其中一个拆分词有大写字母,如果一个词以拆分词结尾,它就会搞砸。

我的拆分词基本上是我要删除的词(因为大多数公司等不包括它们)。它们包括:

此外,我删除它们的方法是使用 split 和 join (str.split('and ').join('')),这对我来说似乎不是最简单的方式。

除了这些问题,它工作正常。谁能帮我缩小功能并解决问题?谢谢。

函数:

String.prototype.toAbbrev = function () {
var s = [];
var a = this.split('and ').join('').split('of ').join('').split('the').join('').split('for ').join('').split('to ').join('').split(' ');
for (var i = 1; i < a.length + 1; i++) {
s.push(a[i - 1].charAt(0).toUpperCase());
}

return s.join('.');
}

测试公司的输出

The National Aeronautics and Space Administration           ->    N.A.S.AThe National Roads and Motorists' Association               ->    N.R.M.ARoyal Society for the Prevention of Cruelty to Animals      ->    R.S.P.C.A

最佳答案

我认为这样的方法可能效果更好:

var toAbbrev = function(str){
return str.replace(/\b(?:and|of|the|for|to)(?: |$)/gi,''). // remove all occurances of ignored words
split(' '). // split into words by spaces
map(function(x){
return x.charAt(0).toUpperCase(); // change each word into its first letter capitalized
}).
join('.'); // join with periods
};

下面是正则表达式的分解:

/
\b // word boundary
(?:and|of|the|for|to) // non-capturing group. matches and/of/the/for/to
(?: |$) // non-capturing group. matches space or end of string
/gi // flags: g = global (match all), i = case-insensitive

这里有一个替代方法,它的正则表达式不太复杂:

var toAbbrev = function(str){
return str.split(' '). // split into words
filter(function(x){
return !/^(?:and|of|the|for|to)$/i.test(x); // filter out excluded words
}).
map(function(x){
return x.charAt(0).toUpperCase(); // convert to first letter, captialized
}).
join('.'); // join with periods
};

和正则表达式分解:

/
^ // start of string
(?:and|of|the|for|to) // non-capturing group. matches and/of/the/for/to
$ // end of string
/i // flags: i = case-insensitive

关于javascript - 缩短 Javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21964993/

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