Javascript GAS函数在从脚本调用时起作用,但抛出";。“替换不是一项功能”;当从Google Sheet调用时
我改进了谷歌表单的功能,如下所示。此函数获取一个输入字符串,在fromList中查找每个值,如果找到,则将其替换为toList中的值。用户可以指定replace函数是否区分大小写 如果有人想看一下,这是我的公开文件: 我通过添加Javascript GAS函数在从脚本调用时起作用,但抛出";。“替换不是一项功能”;当从Google Sheet调用时,javascript,regex,google-apps-script,replace,Javascript,Regex,Google Apps Script,Replace,我改进了谷歌表单的功能,如下所示。此函数获取一个输入字符串,在fromList中查找每个值,如果找到,则将其替换为toList中的值。用户可以指定replace函数是否区分大小写 如果有人想看一下,这是我的公开文件: 我通过添加 fromDelimiters,这是一个数组,用户可以在其中指定哪些字符串被视为分隔符(在它成为默认的“,”,“;,”列表之前) toDelimiter,这是一个字符串,用户可以指定它是否要交换原始FromDelimiter 函数预引用(str){ 返回(str+''
函数预引用(str){
返回(str+'').replace(/([\\.\+\*\?\[\^\]\$\(\)\{\\\\\\=\!\\\\\\\\\\;\:])/g,“\\$1”);
}
函数MultFindReplace(输入、fromList、toList、fromlimiters、toDelimiter、区分大小写){
/*默认行为它不区分大小写*/
if(区分大小写==未定义){
区分大小写=错误;
}
/*如果源列表不是列表,则变为列表*/
if(typeof fromList!=“对象”){
fromList=[fromList];
}
/*如果要列出的对象不是列表,请变成列表*/
if(toList的类型!=“对象”){
toList=[toList];
}
/*强制输入为字符串*/
var result=input.toString();
if(toDelimiter!=未定义){
var RareString=“AÔ;
}否则{
var RareString=“”;
}
/*使用最大大小进行迭代*/
var biger=Math.max(fromList.length,toList.length);
/*定义起始分隔符。通常用户应该输入一个包含他想要匹配的分隔符的数组*/
if(fromDelimiters==未定义){
fromDelimiters=[“,”,“,”;“,”“];//如果用户未指定任何分隔符,请检查所有默认分隔符
}else if(typeof fromdimiters!=“object”){
从DelimiTeS=(FROM DELIMITESER);和/或如果用户指定了某个字符串而不是一个数组,则将整个字符串视为定界符。
}
/*为每对from和to单词跑步*/
对于(变量i=0;i result=result.replace(新的RegExp(“\w*”)首先未定义"
您有很多对replace函数的调用,并且使用了很多regex,因此我怀疑由于数据的不一致性,您将来会遇到很多类似的问题。我建议您进行内部检查,以确保结果在整个脚本中都是定义的,否则您将永远与此问题作斗争。它不会it’不起作用,因为在这种情况下,toValue
是一个数组,它没有。replace
方法。如果你解释一下你想实现什么,我们可以帮你一点忙。你好@Cooper谢谢你的帮助。未定义的在原始函数中有,它收到了很多的升级票。它对我很好,所以我从未更改过它。关于构建检查,我会尝试。但这与我提到的问题无关。我的问题是,我在GAS环境中运行了这个函数,它工作了。但是当我在Google Sheet环境中运行相同的函数时(使用相同的硬编码输入,而不是从单元格中获取它们),它不再工作了。您好@WiktorStribiżew tks,请发表评论。我用我的最终目标编辑了我的问题。您能解释一下toValue
是一个数组吗?在这行:var toValue=toList[(I%(toList.length))]
它以字符串的形式返回。此外,这并不能解释为什么从GAS works内部以本机方式运行该函数,而从Google Sheet以相同的硬编码输入运行该函数却不能。