Javascript 如何在innerHTML中模拟标记替换?

Javascript 如何在innerHTML中模拟标记替换?,javascript,regex,Javascript,Regex,我正在尝试使用javascript正则表达式模拟降价。我想写一个函数来翻转: # n11 ## n21 ### n31 ### n32 ## n22 # n12 ## n23 hello # n31 ## n24 # n41 进入: 但这些试验都没有成功 最有用的方法是让编号在regex replace函数中工作,其中编号在非“#”行之后重置 我可以把它分成几行,然后用一个函数对行列表进行操作。 但这比正则表达式的效率要低 我可能缺少一些见解。 var text=“#n11\n#n21\n#n

我正在尝试使用javascript正则表达式模拟降价。我想写一个函数来翻转:

# n11
## n21
### n31
### n32
## n22
# n12
## n23
hello
# n31
## n24
# n41
进入:

但这些试验都没有成功

最有用的方法是让编号在regex replace函数中工作,其中编号在非“#”行之后重置

我可以把它分成几行,然后用一个函数对行列表进行操作。 但这比正则表达式的效率要低

我可能缺少一些见解。

var text=“#n11\n#n21\n#n31\n#n32\n#n22\n#n12\n#n23\n#n31\n#n24\n#n41”;
函数标记(文本){
//最大深度(N.N.N.N…中的最大N个数)
var MAXDEPTH=10;
//保存N.N.N…中第i个数字N的值。。。。
var区段=新阵列(最大深度);
//将其全部初始化为0,以便第一次替换将变为1.1.1.1…(0+1)
截面填充(0,0,最大深度-1);
//检查:A)有效替换(\s*.+.*).B)无效替换(\s*[^.\n]+),以便在没有替换时可以初始化节数组
返回文本。replace(/(^\s*(#+)(.*)$)|(^\s*[^#\n]+$)/mg,函数(匹配、替换、锐化,后面){
//如果此行不是有效的替换,请使用零重新初始化节
如果(!替换){
//重新初始化节
截面填充(0,0,最大深度-1);
//返回匹配,以便不替换任何内容
复赛;
}
//长度-1表示此替换的深度
变量长度=锐度长度;
//将该深度后的所有替换重新初始化为零,因此当我们从1.2.转到1.3.时,3.(1.3.N.N.N.N..)后的所有N部分将初始化为0
截面填充(0,长度,最大深度-1);
//增加该深度的截面(如果长度为2,截面为1.2,则变为1.3)
截面[长度-1]++;
//替换######字符串
var替换=”;
对于(变量i=0;i
var text=“#n11\n#n21\n#n31\n#n32\n#n22\n#n12\n#n23\n#n31\n#n24\n#n41”;
函数标记(文本){
//最大深度(N.N.N.N…中的最大N个数)
var MAXDEPTH=10;
//保存N.N.N…中第i个数字N的值。。。。
var区段=新阵列(最大深度);
//将其全部初始化为0,以便第一次替换将变为1.1.1.1…(0+1)
截面填充(0,0,最大深度-1);
//检查:A)有效替换(\s*.+.*).B)无效替换(\s*[^.\n]+),以便在没有替换时可以初始化节数组
返回文本。replace(/(^\s*(#+)(.*)$)|(^\s*[^#\n]+$)/mg,函数(匹配、替换、锐化,后面){
//如果此行不是有效的替换,请使用零重新初始化节
如果(!替换){
//重新初始化节
截面填充(0,0,最大深度-1);
//返回匹配,以便不替换任何内容
复赛;
}
//长度-1表示此替换的深度
变量长度=锐度长度;
//将该深度后的所有替换重新初始化为零,因此当我们从1.2.转到1.3.时,3.(1.3.N.N.N.N..)后的所有N部分将初始化为0
截面填充(0,长度,最大深度-1);
//增加该深度的截面(如果长度为2,截面为1.2,则变为1.3)
截面[长度-1]++;
//替换######字符串
var替换=”;
对于(变量i=0;ilog(“在:\n之后,转换标记(文本))
m
修饰符添加到正则表达式中,使
^
$
表示行的开始和结束。哦,
g
修饰符也使其成为全局的。似乎
[^]+
应该是
+
。所以:
/^\s*####s++$/gm
m
修饰符添加到正则表达式中,以便
^
$
表示行的开始和结束。哦,
g
修饰符也使其成为全局的。似乎
[^]+
应该是
+
。所以:
/^\s*####\s++$/gm
粗略检查。。。看起来不错。我没有机会玩它。再过几个小时我就有空了。非常感谢。我刚试过。它起作用了!现在我要努力了解你做了什么。我喜欢你细心地组织和评论。我将要求回答这个问题。指向你,先生!粗略检查。。。看起来不错。我没有机会玩它。再过几个小时我就有空了。非常感谢。我刚试过。它起作用了!现在我要努力了解你做了什么。我喜欢你细心地组织和评论。我将要求回答这个问题。指向你,先生!
1. n11<br />
1.1. n21<br />
1.1.1. n31<br />
1.1.2. n32<br />
1.2. n22<br />
2. n12<br />
2.1. n23<br />
hello
1. n31<br />
1.1. n24<br />
2. n41<br />
text=text.replace(/^\s*###\s+([^]+)$/, replace3);
text=text.replace(/^\s*##\s+([^]+)$/, replace2);
text=text.replace(/^\s*#\s+([^]+)$/, replace1);