Получить инициалы полных имен с акцентированными символами через REGEX - PullRequest
2 голосов
/ 21 июня 2019

Я хочу получить инициалы полного имени, даже если имя содержит акценты, точки или запятую.

Если у меня есть имя:

"Рауль, Морено.Родригес Карлос "

Я получаю" RLMRGC ".

мой код:

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

Я хочу получить" RMRC ",Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 21 июня 2019

Попробуйте это (с помощью REGEX):

const data = "Raúl, Moreno. Rodríguez Carlos";
const result = data.match(/\b[A-Z]/gm);
console.log(result);

другое решение без REGEX:

const data = "Ędward Ącki";
const result = [...data].filter((c, k, arr) => c !== ' ' && (k == 0 || arr[k-1] == ' ' ))
console.log(result);
0 голосов
/ 21 июня 2019

Полностью Unicode-совместимое решение должно соответствовать любой букве после символа, кроме буквы или цифры.

Вот два решения: 1) решение на основе XRegExp для любого браузера и 2) решение, совместимое только со средой JS ECMAScript 2018.

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}]))
0 голосов
/ 21 июня 2019

Я предполагаю, что это выражение может работать:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...