javascript替换字符
不用多言,这种技术被广泛应用于表单验证,语法高亮和危险字符过滤中。一段话如果很长,如果不想像下面那样替换,我们得想些办法了。
str = str. replace( /&(?! #?\w+;)/g , '&'). replace( / "([^" ]*)"/g , '“$1”' ). replace( /</g , '<' ). replace( />/g , '>' ). replace( /…/g , '…' ). replace( /“/g , '“' ). replace( /”/g , '”' ). replace( /‘/g , '‘' ). replace( /’/g , '’' ). replace( /—/g , '—' ). replace( /–/g , '–' ); |
上面这个还算短了,我看过一些论坛的JS代码,在把Wind Code转换成HTML时,那真是疯子似的写上二三十行。其实我们大可以把这些匹配模式与替换后的字符放到一个哈希中,然后一口气替换掉。
var hash = { '<' : '<' , '>' : '>' , '…' : '…' , '“' : '“' , '”' : '”' , '‘' : '‘' , '’' : '’' , '—' : '—' , '–' : '–' }; str = str. replace( /&(?! #?\w+;)/g , '&' ). replace( / "([^" ]*)"/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+;)' : '&' , '"([^"]*)" : ' “$1” ', ' < ' : ' < ' , ' > ' : ' > ', ' … ' : ' … ', ' “ ' : ' “ ' , ' ” ' : ' ” ' , ' ‘ ' : ' ‘ ' , ' ’ ' : ' ’ ' , ' — ' : ' — ', ' – ' : ' –' }); |
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码


机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步