Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 将标记添加到bbcode标记之外的文本_Javascript_Regex_Parsing_Bbcode - Fatal编程技术网

Javascript 将标记添加到bbcode标记之外的文本

Javascript 将标记添加到bbcode标记之外的文本,javascript,regex,parsing,bbcode,Javascript,Regex,Parsing,Bbcode,我有一个无法回答的问题。我编写了一个BBCODE编辑器,在所见即所得编辑器和代码编辑器之间切换 可视化编辑器是从拖放blocs系统(图片、文本等)构建的 在可视化编辑器中,当用户拖动新文本块时,内容会自动写入[text][/text]标记之间 在代码编辑器中,用户可以编写自由文本,而无需[text][/text]标记 为了能够在两个编辑器之间切换,需要在代码编辑器的[text][/text]标记之间添加自由文本 示例: 我在代码编辑器中编写文本和代码: Cum haec taliaque sol

我有一个无法回答的问题。我编写了一个BBCODE编辑器,在所见即所得编辑器和代码编辑器之间切换

可视化编辑器是从拖放blocs系统(图片、文本等)构建的

在可视化编辑器中,当用户拖动新文本块时,内容会自动写入
[text][/text]
标记之间

在代码编辑器中,用户可以编写自由文本,而无需
[text][/text]
标记

为了能够在两个编辑器之间切换,需要在代码编辑器的
[text][/text]
标记之间添加自由文本

示例

我在代码编辑器中编写文本和代码:

Cum haec taliaque sollicitas eius aures everberarent expositas semper eius modi
rumoribus et patentes.
[img]https://foo.com/fighters.png[/img]
Denique Antiochensis ordinis vertices sub uno elogio iussit occidi ideo efferatus,
quod ei celebrari vilitatem intempestivam urgenti, cum inpenderet inopia
[img]https://foo.com/fighters1.png[/img]
[img]https://foo.com/fighters2.png[/img]
Utque proeliorum periti rectores [i]primo catervas[/i] densas opponunt et fortes,
deinde leves armaturas, post iaculatores ultimasque subsidiales acies, si fors
adegerit
如果切换到visual editor,则需要在
[text][/text]
之间添加自由文本,如下所示:

[text]Cum haec taliaque sollicitas eius aures everberarent expositas semper eius modi
rumoribus et patentes.[/text]
[img]https://foo.com/fighters.png[/img]
[text]Denique Antiochensis ordinis vertices sub uno elogio iussit occidi ideo efferatus,
quod ei celebrari vilitatem intempestivam urgenti, cum inpenderet inopia[/text]
[img]https://foo.com/fighters1.png[/img]
[img]https://foo.com/fighters2.png[/img]
[text]Utque proeliorum periti rectores [i]primo catervas[/i] densas opponunt et fortes,
deinde leves armaturas, post iaculatores ultimasque subsidiales acies, si fors
adegerit[/text]
我认为有两种方法:

  • 使用循环拆分文本和bbcode,并使用其他循环重新生成代码
  • 使用正则表达式获取自由文本并替换它
最好的办法是什么?您认为可以从正则表达式添加标记吗

谢谢,, 托马斯

试试这个:

const regex=/(\[(img\w{4,})\][\s\s]*?\[\/\2\])(\n?)([\s\s]+?)(\n?(=$\124;\[(?:img\w{4,})\])/gi;
设str=`
金黄色溶液中的血样不会暴露在水下
rumoribus等专利。
[图片]https://foo.com/fighters.png[/image]
丹尼克·安提俄切斯(Denique Antiochensis ordinis)在西方的影响,
在紧急情况下,以及在紧急情况下,我们可以庆祝一下
[图片]https://foo.com/fighters1.png[/image]
[图片]https://foo.com/fighters2.png[/image]
作为一个机会和优势,我们的大学校长,
设备的设计,最终的辅助设计,用于
阿德格里特`;
让m;
让outtr='';
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
如果(m.index==regex.lastIndex){regex.lastIndex++;}
//可以通过'm`-变量访问结果。
//m[1]==结构标签
//m[4]==文本内容
//m[3]和m[5]是新线(如果存在)
if(m[1]的类型!=“未定义”){
超出量+=m[1]+m[3];
}
否则{
outstr+='[text]'+m[4]+'[text]'+m[5];
}
}

控制台日志(outsr)为什么只有第一行获得输出上的[text]标记?还有,确定什么是文本块的逻辑是什么?我的意思是:为什么第一个文本块不能同时包含第一个图像,甚至是整个输入文本?嗨,朱利奥,这是一个错误,所有自由文本都需要在[text]标记中,我纠正了这一点。这更有意义,但它仍然不清楚包装文本背后的逻辑。例如,在第一段中,您似乎在某个标记(一个
[img]
标记)之前停止,但最后一段包装了一个
[i]
标记。那么,如何使用与其他标记相关的
[text]
标记呢?在哪里开始和停止
[text]
标志?在bbcode中,您有样式标签(如
[b]
表示粗体,
[i]
表示斜体,
[u]
表示下划线)和“结构化”代码,如
[img]
[quote]
[text]
是html中的
标记<代码>[text]
从任何地方开始,在“结构”标记之前停止:)你好,胡里奥,你是国王!谢谢你解释的正则表达式,它非常值得欣赏