基于textarea与div的代码编辑器HTML标签替换异常问题求助
解决代码编辑器文本截断问题
嘿,我一眼就瞅出你这个问题的症结所在了——正则表达式的写法错了!
你当前用的替换代码是:
str.replace('/</g', "&lt;")
这里的第一个参数'/</g'是普通字符串,不是真正的正则表达式。JavaScript里如果把正则放在引号里,它会被当成纯文本去匹配,根本不会按正则规则全局查找<。这就导致你的替换逻辑完全偏离预期:
- 输入
test <时,因为文本里没有'/</g'这个内容,替换等于没执行,所以显示正常; - 继续输入字符后,错误的匹配规则意外打乱了文本结构,最终引发内容截断。
正确的写法
把正则写成字面量形式(不带引号),或者用RegExp构造函数创建正则对象:
方法1:正则字面量(推荐)
str = str.replace(/</g, "&lt;");
这里/</g是标准正则表达式,g标识全局匹配所有符合条件的内容。
方法2:RegExp构造函数
str = str.replace(new RegExp('<', 'g'), "&lt;");
这种方式适合动态生成正则规则的场景,第二个参数'g'同样表示全局匹配。
额外小提示
做代码编辑器语法高亮时,建议统一处理所有需要转义的特殊字符(比如&、<、>),而且要注意转义顺序——比如先把&转成&,再处理其他标签,避免出现嵌套转义的问题。
内容的提问来源于stack exchange,提问作者P. Jerome
相关产品推荐
相关产品推荐

