通过REGEX获取带有重音符号的全名的缩写

时间:2019-06-20 22:26:24

标签: javascript regex

我想获得全名的缩写,即使该名称带有重音符号,点或逗号。

如果我叫:

  

“劳尔,莫雷诺。罗德里格斯·卡洛斯”

我得到“ RLMRGC”。

我的代码是:

user.displayName.match(/\b[a-zA-Z]/gm).join('').toUpperCase()

我想获得“ RMRC”。预先感谢。

3 个答案:

答案 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}])后的负数)