Angular/JS中如何用单个正则按匹配内容执行对应替换
Angular/JS 应用场景
不需要链式写一堆replace,也不用搞复杂的捕获组,用正则多选分支搭配替换映射表+replace回调,一次调用就能搞定所有替换。
实现代码
// 替换规则映射表,key是要匹配的内容,value是替换后的结果,后续加规则直接在这里加键值对 const entityMap = { '<': '<', '>': '>', '"': '"', '&': '&', ''': "'" }; // 一次replace完成全部替换,注意正则不要用引号包裹,直接传字面量 const decodedStr = input.replace(/<|>|"|&|'/gm, match => entityMap[match] ?? match);
说明
replace方法第二个参数支持传回调函数,正则每命中一个匹配项,就会执行一次回调,回调第一个参数就是当前实际匹配到的字符串,直接返回对应替换值即可。- 这种写法只会遍历原字符串一次,比链式调用多次
replace(每次调用都要全量遍历一遍字符串)性能更好,代码也更简洁易维护。 - 注意不要把正则放在引号里:JS里
/xxx/gm是原生正则字面量,套了引号就变成普通字符串匹配,g(全局匹配)、m(多行匹配)标记都会失效。 - 代码里的
?? match是兜底逻辑,如果命中了映射表里没配置的内容,就原样返回,不会出现返回undefined的问题。
如果你要处理的是双重转义的实体,比如把&lt;替换成<,只需要改entityMap里的键值对应关系就行,核心逻辑不用动。
内容的提问来源于stack exchange,提问作者RooksStrife
相关产品推荐
相关产品推荐

