我要用
JS 替换一个多行文本的关键字
正常,没有变量的时候应该是这样:
把 a 替换成 b:
string.replace("a","b");
以上只能替换第一个匹配的,要全文匹配应该用正则表达式:
string.replace(/a/g,"b");
正则加个参数 g ,表示全文匹配。
但现在,我要替换的不是 a 这个字符了,而是从外面传进来的一个变量:
var key;
我可以这么写:
string.replace(key,"b");
这只能替换第一个匹配的,要全文匹配就遇到难题了:
string.replace(/key/g,"b");
这样写是
不行的,变量 key 传不到正则里面去。。。头疼啊
我先找 replace 替换变量,有说用加号拼接正则的,好像也失败了。。。看得我晕晕乎乎的。
我无意中发现 java 有个 replaceAll() 方法,我想如果可以这样不就好了吗:
string.replaceAll(key,"b");
这样就不用正则了,变量就能进去了。
然后发现
JS 里没有 replaceAll() 这个方法。。
我靠,,然后我又查
JS 怎么能够实现 replaceAll 这个方法,网上各种自己写函数啊,,看得我也晕晕乎乎的。
后来我的思路又回到了怎样把变量传到 replace() 方法里面去。
哎~功夫不负有心人,看到一篇文章:
文章的最后,给出了
JS 里面正则表达式的另一个使用方法,那就是:
string.replace(new RegExp(key,'g'),"b");
这里,利用
JS 的
RegExp 对象,将 g 参数单拿了出来,同时,正则的内容可以用变量来代替了
还有一种方法,采用递归方法解决
function dcMap(mName, key, val) { if (mName.indexOf(key) > -1) { mName = mName.replace(key, '<img src="/' + val + '"/>'); } //替换之后继续判断 if (mName.indexOf(key) > -1) { mName = dcMap(mName, key, val);//递归当前方法,直到查找完成 } return mName; }