Javascript 用于在不包含标记的行上用br替换换行符的RegExp

Javascript 用于在不包含标记的行上用br替换换行符的RegExp,javascript,html,regex,Javascript,Html,Regex,在String.replace()中是否有一个RegExp可以用来在包含html标记的文本中用br标记替换换行符…就好像它不包含标记一样(完全忽略只包含标记的行) e、 g如果我有以下文本+html输入 <p> line one line <b>two</b>bold line three </p> 第一行 第二行粗体 第三行 将成为 <p> line one<br> line

在String.replace()中是否有一个RegExp可以用来在包含html标记的文本中用br标记替换换行符…就好像它不包含标记一样(完全忽略只包含标记的行)

e、 g如果我有以下文本+html输入

<p>
    line one
    line <b>two</b>bold
    line three
</p>

第一行
第二行粗体
第三行

将成为

<p>
    line one<br>
    line <b>two</b>bold<br>
    line three
</p>

第一行
第二行粗体字
第三行


任何帮助都是非常严格的

我认为这对regex来说不是一份好工作。您最好使用
FIFO
缓冲区一次读取两行,如果第一行只有一个标记(我猜您可以使用正则表达式来检测),您只需读取下一行(丢弃带标记的行)并重做。如果在第一行中未检测到标记,请将

附加到第二行并替换该行

这里有一个快速的n-dirty正则表达式来解析标记(请注意,这只是为了演示,它不会处理格式错误的标记,并且可能会很容易损坏):

还有玩的地方

对于缓冲区,您可以使用带有
shift()
push()
Array
来分别清除旧行和读取下一行。用正则表达式检查数组中的第一个元素,如果通过,则更改第二个元素并用新的替换文件中的字符串

下面是它的外观:

< test = ['first', 'second']
> Array [ "first", "second" ]
< test.shift()
> "first"
< test.push('third')
> 2
< test
> Array [ "second", "third" ]
数组[“第一”、“第二”]
“第一”
 2
<测试
>数组[“第二”、“第三”]

是它返回的内容。

不太清楚,但这是一个想法:

str = str.replace(/([^>]) *\r?\n(?! *<)/g, "$1<br>");

str=str.replace(/([^>])*\r?\n(?*
和任意数量的空格。如果没有
第1行和第3行之间的区别,请使用负数进行检查。但是,您的
第1行
前面有一行只包含一个标记,对吗(
)?根据你的规则,在这种情况下,它不应该有一个

。它不应该只是“除了最后一行以外的所有行都需要一个

”?你是对的,我更新了这篇文章,让它更清楚我需要什么。谢谢你指出错误。