Javascript: элегантное регулярное выражение - PullRequest
0 голосов
/ 22 октября 2019

У меня есть текст, который имеет следующие строки:

Lorem ipsum - sit
Dolor sit - consectetur adipiscing elit
Adipiscing elit
Integer egestas - congue
Egestas quam

Мне нужно получить это:

Lorem ipsum 2017 - sit
Dolor sit 2017 - consectetur adipiscing elit
Adipiscing elit 2017
Integer egestas 2017 - congue
Egestas quam 2017

Я пытаюсь сделать это, используя регулярное выражение для каждой строки:

name.replace(/([a-zA-Z\s].*)([-]?)/, '$1 '  + 2017 + ' $2') 

но получите год в конце каждой строки.

Lorem ipsum - sit 2017 
Dolor sit - consectetur adipiscing elit 2017 
Adipiscing elit 2017 
Integer egestas - congue 2017 
Egestas quam 2017 

Ответы [ 3 ]

0 голосов
/ 22 октября 2019

Если вы делаете это построчно (так как в регулярном выражении нет g), тогда как Федерико Клез Каллока сказал , удалите . в .*. Также обратите внимание, что '$1 ' + 2017 + ' $2' более просто написано просто '$1 2017 $2':

name.replace(/([a-zA-Z\s]*)([-]?)/, '$1 2017 $2')
// No . here ------------^

Live Пример:

const text = `Lorem ipsum - sit
Dolor sit - consectetur adipiscing elit
Adipiscing elit
Integer egestas - congue
Egestas quam`;

console.log(text.split(/\r?\n/).map(name =>
  name.replace(/([a-zA-Z\s]*)([-]?)/, '$1 2017 $2')
).join("\n"));
0 голосов
/ 22 октября 2019

Вот это с некоторыми группами с негативным прогнозом ....

enter image description here

const regex = /^((?:(?! - ).)+)/gm;
const str = `Lorem ipsum - sit
Dolor sit - consectetur adipiscing elit
Adipiscing elit
Integer egestas - congue
Egestas quam`;
const subst = `$1 2017`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);
0 голосов
/ 22 октября 2019

const textOne = 'text one -one';
const textTwo = 'text two two';
console.log(textOne.replace(/([a-zA-Z\s]*)([-]?)/, '$1'  + 2017 + ' $2'));
console.log(textTwo.replace(/([a-zA-Z\s]*)([-]?)/, '$1 '  + 2017 + ' $2'));

Я думаю, что это сделает.

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