仅当两者之间存在某些文本时,正则表达式才匹配星号
Posted
技术标签:
【中文标题】仅当两者之间存在某些文本时,正则表达式才匹配星号【英文标题】:Regex to match asterisk only if some text is present in between 【发布时间】:2021-04-27 06:03:31 【问题描述】:我有一个正则表达式模式,可以检测整个模式,即星号和中间的文本。
模式:(\*|__)(.*?)\1
我希望它只匹配星号,当单词出现在两者之间时。 示例:
*This is one* This is some other text *New word* Another text another* and there is some more text
应检测到This is one
的星号;
应检测到New word
的星号;
不应检测到最后一个星号,因为它没有任何结束星号。
我尝试了几种方法,但找不到一种方法,其中没有检测到中间词,只有星号。
编程语言: 打字稿(角度)
示例 2:
*Project Name:* This is some other text *New word* Another text another and there is some more text
【问题讨论】:
我认为你可以使用\*\b.*?\b\*
或(\*|__)\b(.*?)\b\1
@WiktorStribiżew 我希望只检测星号而不是中间的单词。我的正则表达式和你的完全一样
不,这不是一个好主意。你打算怎么处理他们?
见regex101.com/r/PdzmLX/1 - 使用上面的模式并替换为<ITALIC>$2<ITALIC>
或任何与$2
(或\1
)之间的东西。
你使用什么编程语言?
【参考方案1】:
你可以使用
/(\*|__)(?!\s)(.+?)(?<!\s)\1/g
请参阅regex demo。由于您实际上想用标签将*
括起来,因此您可以使用<i>$2</i>
替换模式,其中$2
是对第2 组值的反向引用。
详情:
(\*|__)
- 第 1 组:*
或 __
(?!\s)
- 当前位置右侧不允许有空格
(.+?)
- 第 2 组:任何 一个 或多个字符(换行符除外)尽可能少
(?<!\s)
- 当前位置左侧不允许有空格
\1
- 与第 1 组中的值相同(*
或 __
)。
查看 javascript 演示:
let text = '*This is one* This is some other text *New word* Another text another* and there is some more text **';
text = text.replace(/(\*|__)(?!\s)(.+?)(?<!\s)\1/g, '<i>$2</i>');
console.log(text);
【讨论】:
如果中间有任何特殊字符,如冒号、分号、撇号等,则不起作用。它也可以与它们一起使用吗? @MoannaTabala 除了换行符之间可以有任何其他内容,请参阅regex101.com/r/PdzmLX/3 如果您尝试问题中的示例 2,则正则表达式会中断。它不能按预期工作(当冒号或任何其他特殊字符介于两者之间时) @MoannaTabala 然后尝试空白边界,/(\*|__)(?!\s)(.*?)(?<!\s)\1/g
这样检测**,不正确。以上是关于仅当两者之间存在某些文本时,正则表达式才匹配星号的主要内容,如果未能解决你的问题,请参考以下文章