innerhtml.replace没有替换数组javascript中的所有单词
innerhtml.replace not replacing all words in array javascript
我正在尝试制作一个chrome扩展,用另一个单词替换一个单词。
例如,如果我有:
var rep = [['aa','b'],['bb','c']...['yy','z']];
var len = 26;
for(i = 0; i <len; i++){
document.body.innerHTML=document.body.innerHTML.replace(new RegExp("''b"+rep[i][0]+"''b","gi"),rep[i][1]);
}
它只替换数组的前几对,而不替换后几对。例如,如果我"aa是bb是yy",它只更改为"b是c是yy","yy"不变。如何使它替换数组中的所有单词?
根据ECMA脚本规范,replace()
不接受数组作为替换参数,但允许使用函数。该函数获取参数的变量计数:匹配的子串,组(变量)、第一个匹配的偏移索引和初始字符串。
我的方法使用一个matcher和一个mather函数,该函数有条件地将匹配替换为替换。该对是从对象映射搜索字符串中选择的,以进行替换。如果找不到搜索字符串,则返回匹配的字符串,结果不变。
var replMap = {
// specify search tokens as lowercase!
xx: "A",
yy: "B",
zz: "C"
},
str = "xx is yy is zz";
str.replace(/'b([a-z]+)'b/gi, function(match, g1, offset, string) {
// get replacement by matched group value, fall back to value
return replMap[g1.toLowerCase()] || g1;
});
// > "A is B is C"
为了方便起见,使用了replMap
结构。我认为以这种方式创建它是可能的。如果没有,则可以更改函数(此答案中没有提供),或者可以使用reduce()
:将数组转换为映射
var rep = [["xx", "AA"], ["yy", "BB"], ["zz", "CC"]],
replMap = rep.reduce(function(map, arr) { map[arr[0]] = arr[1]; return map; }, {});
有关具有替换功能的replace()
的更多信息,请访问Mozilla开发者网络:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter
Humm您的代码似乎可以工作
var arr = "abcdefghijklmnopqrstuvwxyz".split('');
var rep = arr.map(function(a, i) {
return [a+a,arr[i+1]];
});
var len = rep.length,
str = document.body.innerHTML;
for(i = 0; i < len; i++){
str = str.replace(new RegExp("''b" + rep[i][0]+"''b","gi"), rep[i][1]);
}
document.body.innerHTML = str;
<body>
aa is a bb is a yy
</body>
相关文章:
- 如何在Javascript中从字符串中提取某些单词
- 在javascript中查找单词
- 如何使用Javascript在给定的句子中找到大写单词并在其前面添加一个字符
- JavaScript Regex 将单词替换为其第一个字母,除非在括号内
- Javascript-从随机的单词数组中创建段落
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- Regex或javascript每X个连续单词中有一个单词
- Regex模式,用于检查字符串中每个单词的第一个字母(如果是Javascript中的大写字母)
- 我怎么能用css或(angular)javascript把句子分成两行,只在特定单词后面
- 找出句子中最长的单词——Javascript
- Javascript:当这个单词被点击5次时,下面会显示另一个单词
- 查找并替换多个单词 JavaScript
- 删除连续重复的单词javascript
- 删除带有单词javascript的大括号之间的空格
- 在最后一个单词 Javascript 之前附加字符串
- 添加“-"每个单词-javascript
- 检查字符串是否只有特定的单词javascript
- 提取包含特定单词javascript的文本块中的特定行
- 查找数组中出现次数为偶数的单词 - Javascript
- 提示5个单词,然后显示最长的单词javascript