首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex转义代码块内的标记

使用regex转义代码块内的标记
EN

Stack Overflow用户
提问于 2021-01-03 18:17:45
回答 1查看 684关注 0票数 2

目前,我正在尝试在我的web应用程序中实现我自己对不和谐的感觉。我这样做的方法很简单,就是链接替换方法,每次检查并用适当的HTML标记替换语法(我做了清理,不用担心)。

代码语言:javascript
复制
let description = description.replace(/\`{3}([\S\s]*?)\`{3}/g, '<code>$1</code>')
      .replace(/\`(.*)\`/g, '<code class="inline">$1</code>')
      .replace(/~~([\S\s]*?)~~/g, '<s>$1</s>')

我面临的问题是regex还匹配整个代码块内部和内联代码中。这种行为是不需要的。

代码语言:javascript
复制
**bold and 
*italic and 
__underline and 
~~strikethrough~~__***

`~~Not strikethrough~~`
~~`Strikethrough`~~

Normal text

而不是罢工

代码语言:javascript
复制
~~```
Strikethrough
```~~

**大胆和

*斜体和

__underline和

strikethrough__***

~~Not strikethrough~~

Strikethrough

正常文本

代码语言:javascript
复制

我尝试过这样的方法:/(?<!`[\S\s])\*([\S\s]*?)\*(?!`)/g,但我无法让它像预期的那样工作。

我仍然在学习regex,并继续发现很难把我的头绕过去,所以任何和所有的帮助都是非常感谢的。

.2021年1月4日对不起,我之前没有澄清,但风格应该是“不稳定的”,或者换句话说,可以组合起来,例如***strong and italic***应该变成强的和斜体的

我更新了输入文本(见上文),以便更好地封装所有可能的用例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-03 20:44:38

您可以使用

代码语言:javascript
复制
let text = "**bold and \n*italic and \n__underline and \n~~strikethrough~~__***\n\n`~~Not strikethrough~~`\n~~`Strikethrough`~~\n\nNormal text\n\n```\n~~Not strikethrough~~\n```\n\n~~```\nStrikethrough\n```~~\n\n**bold and \n*italic and \n__underline and \n~~strikethrough~~__***\n\n`~~Not strikethrough~~`\n~~`Strikethrough`~~\n\nNormal text";
const re = /<code(?:\s[^>]*)?>[\s\S]*?<\/code>|`{3}([\S\s]*?)`{3}|`([^`]*)`|~~([\S\s]*?)~~|\*{2}([\s\S]*?)\*{2}(?!\*)|\*([^*]*)\*|__([\s\S]*?)__/g;
let tmp="";
do {
  tmp = text;
  text = text.replace(re, (match, a, b, c, d, e, f) => f ? `<u>${f}</u>` : e ?  `<i>${e}</i>` : d ? `<b>${d}</b>` : c ? `<s>${c}</s>` : b ? `<code class="inline">${b}</code>` : a ? `<code>${a}</code>` : match);
}
while (text != tmp);
console.log(text);

regex演示

重点是为一次传递设计单个正则表达式,并将字符串部分捕获到单独的组中,以应用不同的替换逻辑。

有三种选择匹配

  • `{3}([\S\s]*?)`{3} -三重星号之间的任何子字符串将其捕获到第1组(x)
  • `([^`]*)` -单个星号之间的任何子字符串将其捕获到第2组(y)
  • ~~([\S\s]*?)~~ - ~~将其捕获到第3组(z)之间的任何子字符串

regex演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65553307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档