Регулярное выражение для строк - PullRequest
0 голосов
/ 07 января 2020

У меня есть куча строк, и мне нужно вернуть из них подстроки

Вывод должен заменить вхождения

Test: intervening text - Exists

на

intervening text

У меня есть пробовал:

const inputs = [
  'Test: Text - N GTTTsds - Exists',
  'Test: Text something here - Exists',
  'Tictactoe foo baz - bar - Exists',
  'Something still here',
  'Joe Doe'
];
const output = [];

inputs.forEach(input => {
  const resp = /(?:Test: )?(.+)(- Exists)?/.exec(input);
  output.push(resp);
});
console.log(output);

, но не дает ожидаемого результата:

[
    "Text - N GTTTsds", 
    "Text something here", 
    "Tictactoe foo baz - bar"
    'Something still here',
    'Joe Doe'
]

Ответы [ 4 ]

1 голос
/ 07 января 2020

Почему бы просто не заменить их?

const inputs = [
 'Test: Text - N GTTTsds - Exists',
 'Test: Text something here - Exist',
 'Tictactoe foo baz - bar - Exists',
 'Something still here',
 'Joe Doe'
];
const output = inputs.map(input => input.replace(/(^Test:)|(- Exist(s?)$)/g, '').trim());

console.log(output);
0 голосов
/ 07 января 2020

Другое решение: заставьте регулярное выражение совпадать с началом и концом каждой строки (^ и $) и сделайте квантификатор для произвольных символов в середине ленивым, добавив ?.

const inputs = [
  'Test: Text - N GTTTsds - Exists',
  'Test: Text something here - Exist',
  'Tictactoe foo baz - bar - Exists',
  'Something still here',
  'Joe Doe'
];
const output = [];

inputs.forEach(input => {
  const resp = /^(?:Test: )?(.+?)(- Exists)?$/.exec(input);
  output.push(resp);
});
console.log(output);
0 голосов
/ 07 января 2020

Вы можете использовать это регулярное выражение с якорями и ленивым квантификатором:

/^(?:Test: )?(.+?)(?: - Exists?)?$/;

Также вам нужно получить первую группу захвата из полученного массива.

const inputs = [
 'Test: Text - N GTTTsds - Exists',
 'Test: Text something here - Exist',
 'Tictactoe foo baz - bar - Exists',
 'Something still here',
 'Joe Doe'
];
const output = [];
const re = /^(?:Test: )?(.+?)(?: - Exists?)?$/;
var resp;

inputs.forEach(input => {
 resp = re.exec(input);
 if (resp != null && resp.length > 1)
  output.push(resp[1]);
});

console.log(output);
0 голосов
/ 07 января 2020

Вы можете удалить Test в одной итерации и - Exists в другой.

const input = [
 'Test: Text - N GTTTsds - Exists',
 'Test: Text something here - Exist',
 'Tictactoe foo baz - bar - Exists',
 'Something still here',
 'Joe Doe'
];

const output = input.map(s => s.replace(/Test:\s+/g, '').replace(/\ -\ Exists?/g,  ''));

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