如何使用reqex替换两个特定字符之间的所有匹配char代码?

时间:2017-10-21 14:29:16

标签: javascript jquery regex replace

我想用另一个字符串替换两个字符之间的所有内容。我想出了这个功能:

String.prototype.unformat = function() {
  var s='';
  for (var i=0; i<this.length;i++) s+=this[i]
  return s.replace(/\$[^$]*\$/g, '')
};

使用类似'This is a test $33$'的字符串并使用上述函数取消格式化,它将返回&#39;这是一个测试&#39;。

好的,但是我想用相关的字符代码替换($ ... $)中的所有匹配项。

在示例'This is a test $33$'中,我想用javascript String.fromCharCode()函数的结果替换$ 33 $以获取字符串'This is a test !'作为结果。

如何编辑上面的原型函数以获得所需的结果?

提前致谢:)

2 个答案:

答案 0 :(得分:1)

您可以使用回调函数返回带有匹配代码的fromCharCode()

String.prototype.unformat = function() {
  return this.replace(/\$([^$]*)\$/g, function (string, charcode) {
    return String.fromCharCode(charcode);
  });
};

console.log(("char: $33$").unformat());

为了避免将来出现任何问题,我还会将正则表达式调整为仅匹配数字:/\$(\d+)\$/g

答案 1 :(得分:0)

您可以使用匹配组()并将其替换为String.fromCharCode结果:

String.prototype.unformat = function() {
    return this.replace(/\$(.*?)\$/g, function(match, group) { // the match is the whole match (including the $s), group is the matched group (the thing between the $s)
        return String.fromCharCode(group);
    });
};

备注:

  1. 无需复制字符串,因为替换不会改变原始字符串(this)。
  2. 匹配组(.*?)是非贪婪的(懒惰的),匹配尽可能少的字符。
  3. 最好不要乱用原生的原型(例如字符串,数字......)。
  4. 示例:

    String.prototype.unformat = function() {
        return this.replace(/\$(.*?)\$/g, function(match, group) {
            return String.fromCharCode(group);
        });
    };
    
    console.log('This is a test $33$'.unformat());