javascript - 如何修复此正则表达式以使其正确替换 *(在单词之间)?

标签 javascript regex markdown

我正在练习正则表达式。我想创建转 * 的正则表达式进入<em> ,就像 Markdown 一样:

el = el.replace(/\*\b/g, '<em>')
el = el.replace(/\b\*|(\.|\,|\?|\!|\*|---|\.\.\.\s)\*/g, '$1</em>')

这在大多数情况下都有效。但是,如果您将正则表达式应用于此,事情会变得一团糟:

Chicken teriy*ai*ki, r*ai*men noodles, spaghetti a la moneg*ai*sque.

它产生这个:

Chicken teriy<em>ai<em>ki, r<em>ai<em>men noodles, spaghetti a la moneg<em>ai<em>sque. And wait for me, often falling asleep.</em></em></em></em></em></em>

如何修改此正则表达式以使其生成如下内容:

 Chicken teriy<em>ai</em>ki, r<em>ai</em>men noodles, spaghetti a la moneg<em>ai</em>sque. And wait for me, often falling asleep.

最佳答案

您可以在第二个正则表达式中合并这两个分支,因为它们都以 \* 模式结尾,例如 (\b|\.|,|\?|!|\*|- --|\.{3}\s)\*(您甚至可以将 \.|,|\?|!|\* 单个字符替代项合并到 [ .,?!*]), 然后使用

var s = "Chicken teriy*ai*ki, r*ai*men noodles, spaghetti a la moneg*ai*sque.";
console.log(
  s.replace(/\*\b([^]*?)(\b|[.,?!*]|---|\.{3}\s)\*/g, '<em>$1$2</em>') 
)

详情

  • \*\b - * 后跟字符字符(字母、数字或 _)
  • ([^]*?) - 第 1 组:任何 0+ 个字符,尽可能少(可以替换为 [\s\S]/[\d\D]/[\w\W] 如果您需要更多的可移植性),直到最左边出现
  • (\b|[.,?!*]|---|\.{3}\s) - 字边界,. ,, ?, !, *, ---, ... + 空格
  • \* - * 字符。

关于javascript - 如何修复此正则表达式以使其正确替换 *(在单词之间)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52621034/

相关文章:

javascript - 在 Lodash 中不使用循环获取对象的父对象

java - Java中使用正则表达式分隔多个SQL语句

Python 正则表达式 sub 单个字符

java - 使用正则表达式匹配括号

path - VS Code - 将图像从资源管理器 Pane 拖到 markdown 文件中并作为路径放置

javascript - 当失败的任务使用流队列时,Gulp watch 退出

javascript - 使用 ajax 发送 rowID 并将选定的行附加到新表

javascript - 如何使用 Node.js Express、Mongo 和 Markdown-it 渲染 Markdown?

qt - 如何在 QML 5.14 中使用 Markdown 格式

java - jsp页面中如何像gridview这样的多行记录中删除单条记录