Javascript Regex-用相同数量的另一个字符替换字符序列
Javascript Regex- replace sequence of characters with same number of another character
我试图用JavaScript中相同数量的虚拟字符替换字符串的一部分,例如:'==Hello=='与'==~~~~~=='.
这个问题已经用Perl和PHP回答了,但是我不能让它在JavaScript中工作。我一直在尝试这个:
txt=txt.replace(/(==)([^=]+)(==)/g, "$1"+Array("$2".length + 1).join('~')+"$3");
模式匹配工作得很好,但是替换不是——第二部分添加'~~'而不是模式匹配的长度。把"$2"放在括号里是行不通的。我怎么做才能使它插入正确数量的字符?
使用函数代替:
var txt = "==Hello==";
txt = txt.replace(/(==)([^=]+)(==)/g, function ($0, $1, $2, $3) {
return $1 + (new Array($2.length + 1).join("~")) + $3;
});
alert(txt);
//-> "==~~~~~=="
表达式
的问题txt.replace(/(==)([^=]+)(==)/g, "$1"+Array("$2".length + 1).join('~')+"$3")
表示"$2".length
强制$2
作为字符串字面值,即长度为2的字符串"$2"
。
从MDN文档:
因为要在最后的替换之前进一步转换匹配的结果,所以必须使用函数。
这强制在转换之前对匹配进行评估。
使用内联函数作为参数(和repeat
)—这里$1, $2, $3
是局部变量:
txt.replace(/(==)([^=]+)(==)/g, (_,$1,$2,$3) => $1+'~'.repeat($2.length)+$3);
txt = '==Hello==';
//inline function
console.log(
txt.replace(/(==)([^=]+)(==)/g, (_, g1, g2, g3) => g1 + '~'.repeat(g2.length) + g3)
);
长度属性是在$2替换之前计算的,因此replace()不起作用。奥古斯都建议的函数调用应该可以工作,另一种方法是使用match()而不是replace()。
使用不带/g的match(),返回一个匹配结果数组,这些结果可以按照您的期望进行连接。
txt="==Hello==";
mat=txt.match(/(==)([^=]+)(==)/); // mat is now ["==Hello==","==","Hello","=="]
txt=mat[1]+Array(mat[2].length+1).join("~")+mat[3]; // txt is now "==~~~~~=="
你从中间的表达式中排除了开头/结尾字符,但是如果你想要更多的灵活性,你可以使用它来处理任何被开头/结尾文字括起来的东西。
mat=txt.match(/(^==)(.+)(==$)/)
一个工作示例使用以下片段:
var processed = original.replace(/(==)([^=]+)(==)/g, function(all, before, gone, after){
return before+Array(gone.length+1).join('~')+after;
});
你的代码中的问题是你总是测量"$2"
的长度(总是一个有两个字符的字符串)。有了这个函数,你就可以测量匹配部分的长度。有关更多示例,请参阅replace文档。
相关文章:
- 如何检查一个字符串的所有字符是否都存在于另一个字符串中
- 在另一个由非字母数字字符分隔的字符串中搜索(任何)字符串
- 如何在javascript中将一个数组中的某些部分转换为另一个字符
- 用特殊的字符将值从一个函数传递到另一个函数
- 考虑到我在JavaScript中使用.replace.更改了特定单词中间的另一个字符,我如何在该单词之前添加字符
- 检查另一个字符串 JavaScript 中一个字符串是否有任何字符的最佳方法
- 如何根据 javascript 中的两个字符比较从另一个字符串中提取字符串
- 如何从另一个长字符串创建最多 12 个字符的加密字符串
- Javascript Cryptography - 将一个字符转换为另一个字符
- 删除时将字符替换为另一个字符
- 只将输入的字符从一个文本框复制到另一个
- 嵌套将字符串连接到特定单词后的另一个字符串中
- 如果字符串是单个字符,则替换字符串,如果后跟另一个字符,则不替换字符串
- Regex将每个字符替换为另一个字符,'s在方括号中
- Javascript Lingo游戏-字符串字符等于另一个字符串字符
- 如何将 Javascript 字符串中的“/”替换为另一个字符
- 将内容从一个特殊字符获取到另一个特殊字符
- 函数来确定一个字符串是否只包含来自另一个字符串的字符
- 使用javascript将一个字符动态替换为另一个字符,而不将页面返回到初始状态
- 如何在另一个字符之前插入一个字符