将所有\ n替换为<,所有不在<textarea> </textarea>标记内

时间:2011-09-19 14:03:10

标签: javascript jquery regex

有一个javascript字符串

var s = ' hi there \n <textarea> hello \n there </texarea> hi \n hi';

有人知道如何将\n替换为<br/>只会影响textarea以外的\n符号吗? 结果应该是这样的:

'hi there <br/> <textarea> hello \n there </texarea> hi <br/> hi';   

3 个答案:

答案 0 :(得分:5)

对于单个textarea,您可以使用match选择textarea。然后,使用带有全局标记的正则表达式replace使用<br/>替换所有换行符。

var s = s.replace(/\n/g, "<br//>");
//Replace all newline characters by "<br//>"

var textareaContent = s.match(/<textarea>[\s\S]+?<\/textarea>/i);
//Preparation: Selects a textarea

var newString = textareaContent[0].replace(/<br\/\/>/g, "\n");
//Preparation: replaces all "<br//>" inside the textarea by "\n" (newline feed)

s = s.replace(textareaContent[0], newString);
//Replaces the textarea inside the string by the new textarea (= including "\n")

var desiredResult = s.replace(/<br\/\/>/g, "<br/>");
//Replaces the remaining "<br//>" (the ones outside the textarea) by "<br/>"

如果必须支持多个textareas,则可以将for循环与正则表达式对象的exec方法结合使用。

答案 1 :(得分:0)

将所有内容放入div中,并将所需的\ n标记放在跨度中。所以第一个\ n将是第一个孩子,文本区域外的第二个\ n将是最后一个孩子。

然后你可以调用div的第一个和最后一个孩子并操纵HTML

var s = ' hi there <span class= "changethis">\n</span> <textarea> hello \n there   </texarea> hi <span class= "changethis">\n</span> hi';

答案 2 :(得分:0)

您可以使用此行

var text = text.replace(/\n/g, '<br/>');

这将用文本中的
标签替换所有\ n个字符。