JavaScript 替换Html标签实现代码


Posted in Javascript onOctober 14, 2009
str = str.<br /> 
replace( /&(?!#?\w+;)/g , '&').<br /> 
replace( /undefinedundefined([^undefinedundefined]*)"/g , '“$1”' ).<br /> 
replace( /</g , '<' ).<br /> 
replace( />/g , '>' ).<br /> 
replace( /…/g , '…' ).<br /> 
replace( /“/g , '“' ).<br /> 
replace( /”/g , '”' ).<br /> 
replace( /‘/g , '‘' ).<br /> 
replace( /'/g , ''' ).<br /> 
replace( /—/g , '—' ).<br /> 
replace( /?/g , '?' );

上面这个还算短了,我看过一些论坛的JS代码,在把Wind Code转换成HTML时,那真是疯子似的写上二三十行。其实我们大可以把这些匹配模式与替换后的字符放到一个哈希中,然后一口气替换掉。
var hash = { 
'<' : '<' , 
'>' : '>', 
'…' : '…', 
'“' : '“' , 
'”' : '”' , 
'‘' : '‘' , 
''' : ''' , 
'—' : '—', 
'?' : '?' 
}; 
str = str. 
replace( /&(?!#?\w+;)/g , '&' ). 
replace( /undefinedundefined([^undefinedundefined]*)"/g , '“$1”' ). 
replace( /[<>…“”‘'—?]/g , function ( $0 ) { 
return hash[ $0 ]; 
});

但这个缺陷也很明显,如哈希的键必须是简单的普通字符串,不能是复杂正则,这就是我们不得不分开的原因。replace在老一点的浏览器是不支持function的。为此,我们只好放弃上面最后那个replace方式,替换方统一为普通字符串。
String.prototype.multiReplace = function ( hash ) { 
var str = this, key; 
for ( key in hash ) { 
if ( Object.prototype.hasOwnProperty.call( hash, key ) ) { 
str = str.replace( new RegExp( key, 'g' ), hash[ key ] ); 
} 
} 
return str; 
};

Object.prototype.hasOwnProperty.call( hash, key )是用来过滤继承自原型的方法与属性的。这样一来,使用就简单了:
str = str.multiReplace({ 
'&(?!#?\\w+;)' :'&', 
'undefinedundefined([^undefinedundefined]*)" : '“$1”', 
'<' : '<' , 
'>' : '>', 
'…' : '…', 
'“' : '“' , 
'”' : '”' , 
'‘' : '‘' , 
''' : ''' , 
'—' : '—', 
'?' : '?' 
});
Javascript 相关文章推荐
js中判断数字\字母\中文的正则表达式 (实例)
Jun 29 Javascript
javascript从image转换为base64位编码的String
Jul 29 Javascript
浅谈js中变量初始化
Feb 03 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
Sep 02 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
Feb 08 Javascript
vue-cli 如何打包上线的方法示例
May 08 Javascript
微信小程序使用npm包的方法步骤
Aug 13 Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
javascript贪吃蛇游戏设计与实现
Sep 17 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
Nov 05 Javascript
JS操作JSON常用方法(10w阅读)
Dec 06 Javascript
如何在JavaScript中正确处理变量
Dec 25 Javascript
JavaScript null和undefined区别分析
Oct 14 #Javascript
JavaScript iframe的相互操作浅析
Oct 14 #Javascript
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 #Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
Oct 14 #Javascript
JS+XML 省份和城市之间的联动实现代码
Oct 14 #Javascript
jquery 常用操作整理 基础入门篇
Oct 14 #Javascript
一些技巧性实用js代码小结
Oct 14 #Javascript
You might like
PHP文件上传主要代码讲解
2013/09/30 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
购买原创艺术品:Zatista
2019/11/09 全球购物
自主招生自荐信
2013/12/08 职场文书
商场活动策划方案
2014/01/24 职场文书
节约用水倡议书
2014/04/16 职场文书
校园文化标语
2014/06/18 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
创业计划书之美甲店
2019/09/20 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
JVM之方法返回地址详解
2022/02/28 Java/Android