我正在尝试使用正则表达式从以下句子中提取特定单词“ hardrock”
给出句子:
exact
我只需要单词Hardrock而不是句子中的hardrock-victor即可。
给出句子:
硬岩,胜利者,alpha,亚光,硬岩胜利者,ben,硬岩,rocker,ranzian,硬岩
我尝试使用正则表达式ratio
,但它也与hardrock-victor匹配。 https://www.regextester.com/15
请使用正则表达式帮助我,该正则表达式仅提取所有硬岩,而不提取硬岩胜利者
答案 0 :(得分:2)
这可能有效,但是每个匹配项都包含您可能不需要的字符。
(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 :(得分:2)
答案 2 :(得分:1)
如果输入用,
分隔,则必须这样匹配:
(输入开始或,
)硬摇滚(输入结束或,
)
您可以尝试(^|,)(hardrock)($|,)
如果您不想捕获,
,请使用(?:^|,)(hardrock)(?:$|,)
答案 3 :(得分:0)
在这里,我们可能希望提取hardrock
,不要在其后加上破折号。有几种表达式可以做到这一点,例如:
(hardrock)[^-]
或者我们可以收集第一个捕获组中的所有字符,然后在第二个捕获组中获得所需的hardrock
:
([\s\S]*?)((hardrock)[^-]|hardrock$)?
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);
如果不需要此表达式,可以在regex101.com中对其进行修改或更改。
jex.im还有助于可视化表达式。
如果不需要逗号,我们可以使用另一个捕获组:
([\s\S]*?)(hardrock)([^-]|$)
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);