我想获得全名的缩写,即使该名称带有重音符号,点或逗号。
如果我叫:
“劳尔,莫雷诺。罗德里格斯·卡洛斯”
我得到“ RLMRGC”。
我的代码是:
user.displayName.match(/\b[a-zA-Z]/gm).join('').toUpperCase()
我想获得“ RMRC”。预先感谢。
答案 0 :(得分:1)
尝试此操作(使用REGEX):
const data = "Ędward Ącki";
const result = [...data].filter((c, k, arr) => c !== ' ' && (k == 0 || arr[k-1] == ' ' ))
console.log(result);
没有REGEX的其他解决方案:
{{1}}
答案 1 :(得分:0)
我的猜测是该表达式可能有效:
const regex = /[^A-Z]/gm;
const str = `Raúl, Moreno. Rodríguez Carlos`;
const subst = ``;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log(result);
答案 2 :(得分:0)
完全兼容Unicode的解决方案应匹配除字母或数字以外的任何字符。
这里有两种解决方案:1)适用于任何浏览器的基于XRegExp的解决方案,以及2)ECMAScript 2018 only JS环境兼容的解决方案。
var regex = XRegExp("(?:^|[^\\pL\\pN])(\\pL)");
console.log( XRegExp.match("Łukasz Żak", regex, "all").map(function(x) {return x.charAt(x.length - 1);}).join('').toUpperCase() );
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>
符合ECMAScript 2018的解决方案:
// ONLY WORKING IN ECMAScript2018 COMPLIANT JS ENVIRONMENT!
var regex = /(?<![\p{N}\p{L}])\p{L}/gu;
console.log( "Łukasz Żak".match(regex).join('').toUpperCase() );
// => ŁŻ
注意:
(?:^|[^\pL\\pN])(\pL)
匹配字符串的开头和除字母和数字之外的任何字符,然后匹配任何字母(由于不需要与第一个非捕获组匹配的字符,因此需要.map(function(x) {return x.charAt(x.length - 1);})
来获取比赛的最后一个字符)(?<![\p{N}\p{L}])\p{L}
与任何不以数字或字母开头的字母(\p{L}
)匹配(请参见(?<![\p{N}\p{L}])
后的负数)