3

我遇到了一个问题,我试图在 JavaScript 中使用替换函数,但我无法让它工作。我在用着:

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

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

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

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

谢谢你。

4

3 回答 3

16

你应该试试 :

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

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

于 2013-08-12T19:22:29.520 回答
9

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

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(" " , "");

结果:你好世界

于 2019-01-27T09:25:00.830 回答
1

不幸的是,replaceAll在 Google AppScript 中不可用。您可以使用RegExp版本replace来实现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);
}

我们也可以将它添加到字符串类中,但我建议测试是否已经在这里,以防它可能会添加到更高版本的 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/

于 2021-02-01T16:03:47.037 回答