Использование регулярного выражения с split () только для получения полного имени в строке - PullRequest
1 голос
/ 26 мая 2020

У меня есть такая строка:

var author = "Tom Smith, Will Hughes, Adonis Young and Tyrek Hill";

А это функция getNumOfAuthor:

function getNumOfAuthor(m_name:string) {
    const regex = /\s*(?:,|$)\s*/;
    var str = m_name.split(regex);
    alert(str.length);
    alert(str);
    if (str.length == 1) {
      num_of_author = 1;
    }
    else if (str.length > 1) {
      num_of_author = str.length;
    }

    return num_of_author;
  }

Я хочу использовать split() метод, чтобы полные имена были разделены на элементы в массиве строк с использованием регулярного выражения в качестве разделителя разделения

Кто-нибудь знает, каким будет регулярное выражение? Я могу заставить работать запятую, но я не могу понять, как использовать несколько знаков препинания и c фраз, работающих вместе с ними

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Два предложения:

  1. Просто посчитайте количество , и and и добавьте один.

  2. Разделить на , и and и подсчитываем длину массива.

var author = "Tom Smith, Will Hughes, Adonis Young and Tyrek Hill"

// First suggestion.
let authorCount = author.match(/(, )|( and )/).length + 1;
console.log("num of authors", authorCount);

// Second suggestion.
let authors = author.split(/, | and /)
console.log(authors, authors.length);
1 голос
/ 26 мая 2020

Вот вам страшное регулярное выражение.

const author = "Tom Smith, Will Hughes, Adonis Young and Tyrek Hill";

const regex = /,\s|and\s|(?<name>\w+\s\w+)/g

const result = [...author.matchAll(regex)]
  .map(pr => pr.groups || {
    name: null
  })
  .filter(pr => pr.name)
  .map(pr => pr.name)

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...