感谢你们来到这里,所以我得到了这个小代码:
while(/\[del\](.*?)\[\/del\]/i.exec(text) != null)
text = text.replace(/\[del\](.*?)\[\/del\]/i, "<s>$1</s>");
但是当有换行符时,它就不会匹配。 例如:
[del] asdsadasda
asdadsadsadsadasdsadsa [/ del] - 这不会匹配
我对正则表达式真的很新,所以我做错了什么?
答案 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>");
(它避免了很多工作)