替换所有Google脚本

时间:2013-08-12 19:18:17

标签: javascript replace google-apps-script

我遇到了问题,我正在尝试在JavaScript中使用替换函数,但我无法使其工作。 我正在使用:

var pagename = projectname.replace (" ", "");

但它只需要第一个空间,我想占用所有空间。例如:

“我的第一个项目1”=“Myfirstproject1”,即把所有东西放在一起。

我正在开发谷歌应用程序的脚本。

谢谢。

3 个答案:

答案 0 :(得分:5)

你应该尝试:

var pagename = projectname.replace (/\s/g, '');

正则表达式末尾的g是一个标志,指示替换方法不应仅替换第一次出现的空格字符。

答案 1 :(得分:1)

您可以在其他功能之外使用此代码。

String.prototype.replaceAll = function(search, replacement) {
        var target = this;
        return target.replace(new RegExp(search, 'g'), replacement);
};

然后可以使用replaceAll函数。 示例:

var text = "H e l l o W o r l d";    
text = text.replaceAll(" " , "");

结果:HelloWorld

答案 2 :(得分:1)

很遗憾,replaceAll 在 Google AppScript 中不可用。 您可以使用 RegExpreplace 版本来实现 replaceAll。 如果您想创建某种通用解决方案,您需要从特殊的 RegExp 字符中转义主语,因为 .^(以及许多其他)等符号在正则表达式中具有特殊含义。

function strReplaceAll(subject, search, replacement) {
  function escapeRegExp(str) { return str.toString().replace(/[^A-Za-z0-9_]/g, '\\$&'); }
  search = search instanceof RegExp ? search : new RegExp(escapeRegExp(search), 'g');
  return subject.replace(search, replacement);
}

我们也可以将它添加到 string 类中,但我建议测试它是否已经存在,以防它可能会添加到更高版本的 Google AppScript 中。

if (String.prototype['replaceAll'] == null) { 
  String.prototype['replaceAll'] = function(search, replacement) { 
    return strReplaceAll(this, search, replacement) 
  }; 
}

另外,请注意,$replaceAll 中的替换字符串中具有特殊含义(JavaScript 也是如此)。因此,您可能需要额外的函数 escapeReplacementString 来处理纯文本到文本替换(此函数在 JavaScript 中也很有用)。

function escapeReplacementString(str) { return str.toString().replace(/\$/g, '$$$&'); }

所以通用的文本到文本替换将类似于 text.replaceAll(search, escapeReplacementString(replace))

var text = 'Money is +'; search = '+'; replace = '$& and $$';
console.log(text.replaceAll(search, replace)); // gives you 'Money is + and $' [?!]
console.log(text.replaceAll(search, escapeReplacementString(replace))); // gives 'Money is $& and $$'

更多:https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll

JSFiggle 游乐场:https://jsfiddle.net/r8geycLq/