Регулярное выражение для извлечения текста из строки

#javascript #regex

Вопрос:

Учитывая следующую строку:

 const myString = "This is my comment content. [~firstName.lastName]";
 

Что такое регулярное выражение javascript для извлечения «Имени» и «фамилии»?

Что такое регулярное выражение javascript для извлечения содержимого за вычетом «[~Имя.фамилия]»?

Я не разбираюсь в регулярных выражениях.

Ответ №1:

 const myString = "This is my comment content. [~firstName.lastName]";
const first = myString.match(/.*~(.*)./)[1]
const last = myString.match(/.*.(.*)]/)[1]
const both = myString.match(/.*~(.*)]/)[1]

console.log(first)
console.log(last)
console.log(both) 

Вот хороший веб — сайт для справки по регулярным выражениям

Ответ №2:

Вы можете попробовать это-

 let myString = "This is my comment content. [~firstName.lastName] and the original name is [~John.Doe]";
const regex = /[~([^]] ).([^]] )]/g;

let match = regex.exec(myString);
const names = [];

while(match !== null) {
  names.push({firstName: match[1], lastName: match[2]});
  match = regex.exec(myString);
}

// Remove the pattern from the original string.
myString = myString.replace(regex, '');

console.log(names, myString); 

Этот код найдет все совпадения, найденные для шаблона.

Ответ №3:

Вы можете настроить таргетинг на каждое имя отдельно. match вернет полное совпадение в качестве первого элемента массива, а группировки, указанные в ( и ) в регулярном выражении, в качестве последующих элементов.

 const str = 'This is my comment content. [~firstName.lastName]';
const regex = /[~(. ).(. )]/;
console.log(str.match(regex)); 

Или вы можете нацелиться только на символы в квадратных скобках, а затем split на . .

 const str = 'This is my comment content. [~firstName.lastName]';
const regex = /[~(. )]/;
console.log(str.match(regex)[1].split('.')); 

Комментарии:

1. Это может не удаться для нескольких вхождений шаблона [~firstName.lastName] .

2. Я основываю свои ответы только на информации, представленной в вопросе.