让正则表达式在内容中找到带有换行符的标签内的文本 - JavaScript

时间:2014-09-07 23:34:00

标签: javascript regex

感谢你们来到这里,所以我得到了这个小代码:

while(/\[del\](.*?)\[\/del\]/i.exec(text) != null)
text = text.replace(/\[del\](.*?)\[\/del\]/i, "<s>$1</s>");

但是当有换行符时,它就不会匹配。 例如:

  

[del] asdsadasda
asdadsadsadsadasdsadsa [/ del] - 这不会匹配

我对正则表达式真的很新,所以我做错了什么?

1 个答案:

答案 0 :(得分:3)

默认情况下,在许多正则表达式中,点与换行符不匹配。 Javascript没有单行修饰符(?s)来更改此行为。匹配所有字符(包括换行符)的最新技巧是使用匹配所有空格字符的[\s\S]以及所有不是空白字符的

作为旁注,您不需要将replace方法放在while循环中,因为replace只会在找到某些内容时执行替换。如果要替换所有出现的事件,只需在模式的末尾添加g命令。

text = text.replace(/\[del\]([\s\S]*?)\[\/del\]/ig, "<s>$1</s>");

请注意,对于此特定替换,由于您的del标记似乎没有参数,因此您只需编写:

text = text.replace(/\[(\/?)del\]/ig, "<$1s>");

(它避免了很多工作)