JS 正则替换字符串中的中文汉字

55 min read
let url='https://www.xxx.com/index?type=1&name=蜡笔小新&busiSource=20&businessNo=01EF52E9F12C4A86968FAAD668E5C873'

url=url.replace(/[\u4e00-\u9fa5]/g, function ($) { return encodeURI($) })

console.log(url);//https:
//www.xxx.com/index?type=1&name=%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0&busiSource=20&businessNo=01EF52E9F12C4A86968FAAD668E5C873

js匹配中文汉字的正则:/[\u4e00-\u9fa5]/ g代表替换字符串中所有出现的汉字,不带g的话代表只替换字符串中第一个出现的中文汉字

var foo = '【你好】,【世界】';
//想要替换foo中的【】为指定字符串或者空,可以使用unicode的方法
foo= foo.replace(/\u3010/g,"");//  \u3010  指的是【的unicode编码
foo= foo.replace(/\u3011/g,"");//  \u3011  指的是】的unicode编码

在线转换工具

https://tool.chinaz.com/tools/unicode.aspx

使用原生JS转

//string2unicode
var str_u='\u6211\u662f\u4e2d\u56fd\u4ebaChina';
var ret1 = eval("'" + str + "'");//我是中国人China
var ret2 = (new Function("return '" + str + "'"))();//我是中国人China
var ret3 = unescape(str.replace(/\u/g, "%u"));//我是中国人China
 
//unicode2string
var str = "我是中国人";
var str_u = string2unicode(str);//\u6211\u662f\u4e2d\u56fd\u4eba
var str_s = unicode2string(str_u);// 我是中国人
function string2unicode(str){
  var ret ="";
  for(var i=0; i<str.length; i++){
    //var code = str.charCodeAt(i);
    //var code16 = code.toString(16);       
       //var ustr = "\\u"+code16;
       //ret +=ustr;
       ret += "\\u" + str.charCodeAt(i).toString(16);
      }
       return ret;
}
function unicode2string(unicode){
  return eval("'" + unicode + "'");
}

如果混合了英文,使用下面的方法

function string2unicode(str){
var ret ="";
var ustr = "";
 
for(var i=0; i<str.length; i++){
     
    var code = str.charCodeAt(i);
    var code16 = code.toString(16);
 
    if(code < 0xf){
        ustr = "\\u"+"000"+code16;
    }else if(code < 0xff){
        ustr = "\\u"+"00"+code16;
    }else if(code < 0xfff){
        ustr = "\\u"+"0"+code16;
    }else{
        ustr = "\\u"+code16;
    }  
    ret +=ustr;
    //ret += "\\u" + str.charCodeAt(i).toString(16);   
}
var str_u = string2unicode("中国人CN");//"\u4e2d\u56fd\u4eba\u0043\u004e"
var str_s = unicode2string(str_u);//中国人CN