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

时间:2014-09-02 19:42:11

标签: javascript html regex

我是否可以在String.replace()中使用RegExp来替换带有br标签的换行符,在包含html标签的文本中...好像它不包含标签(完全忽略仅包含标签的行)。

例如,如果我有以下文字+ 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>

任何帮助都是非常有用的

2 个答案:

答案 0 :(得分:0)

我不认为这对正则表达式来说是一个好工作。你可能最好使用FIFO缓冲区一次读取2行,如果第一行只有一个标记(你可以使用正则表达式检测我猜),你只需阅读下一行(丢弃带标签的行)并重做。如果您未在第一行中检测到标记,请将<br>附加到第二行并替换该行。

这是一个用于解析标签的快速n-dirty正则表达式(_note,这仅用于演示,它将处理格式错误的标签,可能会轻易破坏_):

<[a-z]+>

here's可以在某个地方玩。

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

这是它应该是什么样子:

< test = ['first', 'second']
> Array [ "first", "second" ]
< test.shift()
> "first"
< test.push('third')
> 2
< test
> Array [ "second", "third" ]

<是我对javascript控制台的输入,>是它返回的内容。

答案 1 :(得分:0)

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

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

如果前面有非\r?\n和任意数量的空格,请将<br>替换为>。使用否定lookahead进行检查,如果之后没有<,则前面有任意数量的空格。

我认为您希望避免使用<br><br><br></p>之类的内容:)

测试:fiddleregex101