var abbr = "Java Script Object Notation".split(' ').map(function(item){return item[0]}).join('');
15
使用 map (来自函数式编程)
'use strict';
function acronym(words)
{
if (!words) { return ''; }
var first_letter = function(x){ if (x) { return x[0]; } else { return ''; }};
return words.split(' ').map(first_letter).join('');
}
2
@BotNet缺陷:我认为我在经历了3天的正则表达式教程之后解决了它:
==>我是一个动物
(因为单词边界,我常常 grab 我的m),这似乎对我有用 .
/(\s|^)([a-z])/gi
2
使用 ES6 非常简单
string.split(' ').map(i => i.charAt(0)) //Inherit case of each letter
string.split(' ').map(i => i.charAt(0)).toUpperCase() //Uppercase each letter
string.split(' ').map(i => i.charAt(0)).toLowerCase() //lowercase each letter
这仅适用于空格或 .split(' ') 方法中定义的任何内容
即, .split(', ').split('; ') 等 .
1
试试 -
var text = '';
var arr = "Java Script Object Notation".split(' ');
for(i=0;i<arr.length;i++) {
text += arr[i].substr(0,1)
}
alert(text);
// in case the input is lowercase & there's a word with apostrophe
const toAbbr = (str) => {
return str.match(/(?<=(\s|^))[a-z]/gi)
.join('')
.toUpperCase();
};
toAbbr("java script object notation"); //result JSON
// in case the input is lowercase & there's a word with apostrophe
const toAbbr = (str) => {
return str.replace(/(\S+)(\s*)/gi, (match, p1, p2) => p1[0].toUpperCase());
};
toAbbr("java script object notation"); //result JSON
// word = not space = \S+ = p1 (p1 is the first pattern)
// space = \s* = p2 (p2 is the second pattern)
1
这个怎么样:
var str = "", abbr = "";
str = "Java Script Object Notation";
str = str.split(' ');
for (i = 0; i < str.length; i++) {
abbr += str[i].substr(0,1);
}
alert(abbr);
Working Example.
0
这应该做到这一点 .
var s = "Java Script Object Notation",
a = s.split(' '),
l = a.length,
i = 0,
n = "";
for (; i < l; ++i)
{
n += a[i].charAt(0);
}
console.log(n);
13 回答
我认为你要找的是提供的字符串的首字母缩写 .
Note: 对于带连字符/撇号的单词,这将失败
Help-me I'm Dieing
将为HmImD
. 如果这不是你想要的,那么空间分割, grab 第一个字母的方法可能就是你想要的 .这是一个简单的例子:
我想你可以这样做
Explanation: 获取所有
/g
在非字母数字字符后出现的字母数字字符\w
(即:在字边界\b
之后),将它们放在一个带有.match()
的数组上,并将所有内容连接到一个字符串中.join('')
根据您的要求,您还可以考虑简单地选择所有大写字符:
没有正则表达式的最简单方法
使用
map
(来自函数式编程)@BotNet缺陷:我认为我在经历了3天的正则表达式教程之后解决了它:
==>我是一个动物
(因为单词边界,我常常 grab 我的m),这似乎对我有用 .
使用 ES6 非常简单
这仅适用于空格或
.split(' ')
方法中定义的任何内容即,
.split(', ')
.split('; ')
等 .试试 -
演示 - http://jsfiddle.net/r2maQ/
要添加到优秀示例中,您可以在ES6中执行此操作
这也有效,但请忽略它,我在这里有点坚果:-)
备选1:
你也可以使用这个正则表达式返回每个单词的第一个字母的数组
(?<=(\s|^))
被称为positive lookbehind
,它确保我们的搜索模式中的元素前面是(\s|^)
.所以,对于你的情况:
(顺便说一句,还有
negative lookbehind
,positive lookahead
,negative lookahead
,如果你想了解更多)备选方案2:
匹配所有单词并使用
replace()
方法将它们替换为每个单词的第一个字母并忽略空格(该方法不会改变原始字符串)这个怎么样:
Working Example.
这应该做到这一点 .
JavaScript的正则表达式版本与早于ECMAScript 6的Unicode不兼容,因此对于那些想要支持诸如“å”等字符的人来说,需要依赖非正则版本的脚本 .
在版本6上的事件,您需要用\ u表示Unicode .
更多细节:https://mathiasbynens.be/notes/es6-unicode-regex
使用reduce函数的另一个选项: