Javascript 细化此正则表达式以捕获星号之间的封闭字符串,如**(str)**
我正在尝试将**之间的字符串加粗,如Javascript 细化此正则表达式以捕获星号之间的封闭字符串,如**(str)**,javascript,regex,Javascript,Regex,我正在尝试将**之间的字符串加粗,如**hello**到hello。起初看起来很简单,但由于像***a**和**a***这样的情况,我不得不添加一些长模式。当前的正则表达式如下所示: \*\*((?:\*(?!\*)[^*]*)*([^*])*(?:[^*]*(?<!\*)\*)*)\*\* 具有替换功能的代码 const reBoldLine=/\*\*((?:\*(?!\*)[^*])*([^*])*(?:[^*])*(? 编辑:将冗长的解释替换为预期结果,因此,**a***应该变成
**hello**
到hello
。起初看起来很简单,但由于像***a**
和**a***
这样的情况,我不得不添加一些长模式。当前的正则表达式如下所示:
\*\*((?:\*(?!\*)[^*]*)*([^*])*(?:[^*]*(?<!\*)\*)*)\*\*
具有替换功能的代码
const reBoldLine=/\*\*((?:\*(?!\*)[^*])*([^*])*(?:[^*])*(?
编辑:将冗长的解释替换为预期结果,因此,**a***
应该变成a*
或a*
?如果你能将你的案例和预期结果放在一个表格中,这将真正有助于理解你的问题我相信只是一个简单的/\*\*(*)\*\*/
适用于大多数用例。**ab***
的逻辑与处理**a**b**
的方式冲突。@anubhava有一个很好的整体解决方案。我会在@anubhava的解决方案中添加(\w|\s)+以覆盖包含新行的字符串:/\**(\w|s)+.+)\*\*/
**a** → <b>a</b> : success
***a** → <b>*a</b> : success
**a*** → <b>a*</b> : success
**a*a** → <b>a*a</b> : fail with the current regex
**a**a** → <b>a</b>a** : success
const reBoldLine = /\*\*((?:\*(?!\*)[^*]*)*([^*])*(?:[^*]*(?<!\*)\*)*)\*\*/g;
const strs = [
'**a**',
'***a**',
'**a***',
'***a***',
'**a*a**'
]
const replacer = function(match, ...args){
if(match){
return "<b>"+args[0]+"</b>"
}else{
return "undefined"
}
}
for(let str of strs){
console.log(str.replace(reBoldLine, replacer))
}