Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用.replace将复杂的BBCode转换为HTML正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 使用.replace将复杂的BBCode转换为HTML正则表达式

Javascript 使用.replace将复杂的BBCode转换为HTML正则表达式,javascript,regex,Javascript,Regex,有没有办法将这两个语句合并为一个 .replace(/(\[((size=)(1|2|3|4|5|6))\])/gi, '<font size="$4">') .replace(/(\[((\/)(size))\])/gi, '</font>') .replace(/(\[(size=)(1 | 2 | 3 | 4 | 5 | 6))\]/gi,) .替换(/(\[(\/)(大小))\]/gi,“”) 我不确定是否有办法。您不能只使用1个正则表达式,因为您有2个不同的

有没有办法将这两个
语句合并为一个

.replace(/(\[((size=)(1|2|3|4|5|6))\])/gi, '<font size="$4">')
.replace(/(\[((\/)(size))\])/gi, '</font>')
.replace(/(\[(size=)(1 | 2 | 3 | 4 | 5 | 6))\]/gi,)
.替换(/(\[(\/)(大小))\]/gi,“”)

我不确定是否有办法。

您不能只使用1个正则表达式,因为您有2个不同的替换字符串。但是,您可以使用1个正则表达式捕获这些标记,然后链接另一个
replace
方法,将“bad”
标记转换为结束标记

我假设没有空值的属性

var re=/\[\/?size(?:=([1-6]))?\]/gi;
var str='[size=6][/size]';
var subst='';
var result=str.replace(re,subst.replace(//,“”);
//现在,展示一下
document.getElementById(“res”).value=结果

试试这个正则表达式:

var re = /\[(size)=(\d{1,6})\]([^\[]+)\[\/size\]/gi;
var str = '[size=2]dd\n[/size]';
var subst = '<font size="$2">$3</font>';

var result = str.replace(re, subst);


请提供您的输入输出示例…为什么有必要这样做?我喜欢您的答案编写方式。使用1个正则表达式匹配开始和结束标记的想法很好,但是如果它们不在同一个输入字符串中呢?也许,这是这里的主要问题。这里的捕获群体太多了。应该可以减少到
/\[\/?大小(?:=([1-6])?\]/gi
@nhahdh:是的,可能,我们永远不知道OP以后到底想用它们做什么。因此,我倾向于保留原始标记。实际上,如果您使用替换函数来评估要相应地替换的是打开标记还是关闭标记,而不是用关闭标记替换失败的打开标记,那么捕获反斜杠
(\/?)
是有意义的。