JavaScript正则表达式是否匹配嵌套方括号内的任何单词?
我试图找到一种方法,使用正则表达式在方括号内使文本斜体,包括嵌套的方括号,但不包括方括号本身。到目前为止,我想到的最好的办法是:JavaScript正则表达式是否匹配嵌套方括号内的任何单词?,javascript,regex,Javascript,Regex,我试图找到一种方法,使用正则表达式在方括号内使文本斜体,包括嵌套的方括号,但不包括方括号本身。到目前为止,我想到的最好的办法是: text = text.replace(/(\[+)([^\[\]]+)(]+)/g, '$1<span style="font-style: italic;">$2</span>$3'); 应解析为: [test1]test2([[readonly][optionality][argumentType]argumentName[=defau
text = text.replace(/(\[+)([^\[\]]+)(]+)/g, '$1<span style="font-style: italic;">$2</span>$3');
应解析为:
[test1]test2([[readonly][optionality][argumentType]argumentName[=defaultValue]]…)[test3]test4
但是,上述正则表达式产生:
[test1]test2([[readonly][optionality][argumentType]argumentName[=defaultValue]]…)[test3]test4
(使用文本
argumentName
normal而不是斜体)一种方法是匹配每个括号组,并在替换回调中替换该组中的每个单词:
string.replace(/(\[(?:\[[^\]]*\]|[^\[\]]*)*\])/g, function (match) {
return match.replace(/(\w+)/g, '*$1*');
});
示例代码段:
var string=“[test1]test2([[readonly][optionality][argumentType]argumentName[=defaultValue]]…)[test3]test4”;
var result=string.replace(/(\[(?:\[^\]]*\].[^\[\]]*)*\]/g,函数(匹配){
返回匹配项。替换(/(\w+)/g,*$1*);
});
document.body.textContent=结果
你不能用(仅仅)正则表达式来解决这个问题,你需要编写一个解析器。看看这个:这是一个解析器。但是这不也是让argumentName
Unitalized吗?@torazaburo不,根据我上面提供的演示片段,它会返回:[*test1*]test2([[[*readonly*][*optionality*][*argumentType*]*argumentName*[=*defaultValue*]]…)[*test3*]test4
。必须将内部替换替换为([^\[\]+)
,而不是(\w+
),但在其他方面效果很好。谢谢。@CoryG哦,好吧,我以为你只是想说几句话。不过,我很高兴听到这起作用了!事实上,我说得太快了,这对我来说不起作用。
string.replace(/(\[(?:\[[^\]]*\]|[^\[\]]*)*\])/g, function (match) {
return match.replace(/(\w+)/g, '*$1*');
});