首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复这个正则表达式,以便它正确地替换*(在单词之间)?

如何修复这个正则表达式,以便它正确地替换*(在单词之间)?
EN

Stack Overflow用户
提问于 2018-10-03 06:36:15
回答 3查看 88关注 0票数 2

我在练习regex。我想创建将*转换为<em>的regex,就像使用Markdown一样:

代码语言:javascript
复制
el = el.replace(/\*\b/g, '<em>')
el = el.replace(/\b\*|(\.|\,|\?|\!|\*|---|\.\.\.\s)\*/g, '$1</em>')

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

代码语言:javascript
复制
Chicken teriy*ai*ki, r*ai*men noodles, spaghetti a la moneg*ai*sque.

它产生了这样的结果:

代码语言:javascript
复制
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>

如何修改这个正则表达式,以便生成如下内容:

代码语言:javascript
复制
 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.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-03 07:03:51

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

代码语言:javascript
复制
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 -- *后面跟着一个单词字符(字母、数字或_)
  • ([^]*?) - Group 1:任何0+字符,尽可能少(如果需要更多的可移植性,可以用[\s\S] / [\d\D] / [\w\W]替换),直到
  • (\b|[.,?!*]|---|\.{3}\s) -单词边界,.,?!*---... +空格
  • \* -a * char.
票数 2
EN

Stack Overflow用户

发布于 2018-10-03 06:42:56

使用regex \*([\w ^?.]*?)\*

<em>$1<\em>替换

el = el.replace(/\*([\w ^?.]*?)\*/g, '<em>$1<\em>')

正则表达式

票数 1
EN

Stack Overflow用户

发布于 2018-10-03 06:47:20

这应该有效,它将*符号之间的字符包装到em标记中,注意:这适用于所提供的字符串。

代码语言:javascript
复制
 const str = "something that has words surrounded with * signs"
 str.replace(/\*(\w+)\*/g, "<em>$1</em>")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52621034

复制
相关文章

相似问题

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