Извлечь конкретный термин «хард-рок» - PullRequest
4 голосов
/ 21 мая 2019

Я пытаюсь извлечь конкретное слово 'hardrock', используя регулярное выражение из следующего предложения

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

hardrock,victor,alpha,matt,hardrock-victor,ben,hardrock,rocker,ranzian,hardrock

Мне просто нужно слово hardrock, а не слово hardrock-victor из предложения.

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

рудный , победитель, альфа, матовое, рудный-победитель, бен, рудное , коромысло, ranzian, рудный

Я пытался использовать регулярное выражение (hardrock,|,hardrock,|,hardrock), но оно совпадает и с hardrock-victor. https://www.regextester.com/15

Пожалуйста, помогите мне с регулярным выражением, которое извлекает только весь хард-рок, а не победитель хард-рок

Ответы [ 4 ]

2 голосов
/ 21 мая 2019

Слово поиска может быть в начале ^, в конце $ или в окружении ,

Вот как это делается, используя обходные пути для исключения разделителя из результата:

(?<=^|,)hardrock(?=,|$)

regex101

2 голосов
/ 21 мая 2019

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

(hardrock)([^-]|$)

Full match: hardrock,
Group 1: hardrock
Group 2: ,

Full match: hardrock,
Group 1: hardrock
Group 2: ,

Full match: hardrock
Group 1: hardrock
Group 2: 
1 голос
/ 21 мая 2019

Если вход разделен на ,, то вы должны будете подобрать следующее:
(начало ввода или ,) hardrock (конец ввода или ,)

Вы можете попробовать (^|,)(hardrock)($|,)
Если вы не хотите захватывать ,, используйте (?:^|,)(hardrock)(?:$|,)

0 голосов
/ 21 мая 2019

Здесь мы можем извлечь hardrock, за которым не следует тире.Есть несколько выражений, которые могли бы сделать это, например, это:

(hardrock)[^-]

Демо

Или мы можем собрать все символы в первой группе захвата, а затем получитьжелаемый hardrock во втором:

([\s\S]*?)((hardrock)[^-]|hardrock$)? 

enter image description here

const regex = /([\s\S]*?)((hardrock)[^-]|hardrock$)?/gm;
const str = `matt,hardrock,victor,ben,hardrock,rocker,ranzian,hardrock,hardrock,victor,alpha,matt,hardrock-victor,ben,hardrock,rocker,ranzian,hardrock,matt,hardrock,victor,ben,hardrock,rocker,ranzian,hardrock,hardrock,victor,alpha,matt,hardrock-victor,ben,hardrock,rocker,ranzian,hardrock`;
const subst = `$2`;

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

console.log('Substitution result: ', result);

RegEx

Если это выражение нежелательно, его можно изменить или изменить в regex101.com .

RegEx Circuit

jex.im также помогает визуализировать выражения.

enter image description here

Демо

Если запятая нежелательна, мы можем использовать другую группу захвата:

([\s\S]*?)(hardrock)([^-]|$)

enter image description here

const regex = /([\s\S]*?)(hardrock)([^-]|$)/gm;
const str = `hardrock,victor,ben,hardrock,rocker,ranzian,hardrock,hardrock,victor,alpha,matt,hardrock-victor,ben,hardrock,rocker,ranzian,hardrock,matt,hardrock,victor,ben,hardrock,rocker,ranzian,hardrock,hardrock,victor,alpha,matt,hardrock-victor,ben,hardrock,rocker,ranzian,hardrock`;
const subst = `$2\n`;

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

console.log('Substitution result: ', result);

Демо

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