我正在练习正则表达式。我想创建转 *
的正则表达式进入<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/