Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果在特定字符串旁边,则搜索两个字符之间的字符串_Javascript_Google Apps Script - Fatal编程技术网

Javascript 如果在特定字符串旁边,则搜索两个字符之间的字符串

Javascript 如果在特定字符串旁边,则搜索两个字符之间的字符串,javascript,google-apps-script,Javascript,Google Apps Script,我需要对我的函数进行一些修改,以允许在一行值上搜索两个字符串。我正试图通过我自己的工作,但我需要一些帮助。下面是正在查看的单元格值的示例。假设没有前导或尾随换行符。此外,所有单元格的格式都相同。相同的行数,相同的membertype结构:last、first等 假设我想查看此单元格是否包含名为last2的团队领导,或名为first4的经理。员工类型和姓名都将由用户输入 我尝试使用我在的帮助下创建的以下内容 它返回内容在冒号之间(包括冒号)的位置。然后我尝试了以下方法: flatUniqArr[

我需要对我的函数进行一些修改,以允许在一行值上搜索两个字符串。我正试图通过我自己的工作,但我需要一些帮助。下面是正在查看的单元格值的示例。假设没有前导或尾随换行符。此外,所有单元格的格式都相同。相同的行数,相同的membertype结构:last、first等

假设我想查看此单元格是否包含名为
last2
团队领导,或名为
first4
经理。员工类型和姓名都将由用户输入

我尝试使用我在的帮助下创建的以下内容

它返回内容在冒号之间(包括冒号)的位置。然后我尝试了以下方法:

flatUniqArr[0].search('Supervisor:')
这就是我被困的地方。它将索引返回到第一行的最后一位

我的想法是在冒号之间搜索用户输入的名称,如果它们遵循用户输入的成员类型。我怎样才能做到这一点

澄清: 最终目标是验证名称和成员类型是否在同一行上,并且是否从我为
.setHiddenValues()
构建的数组中排除。所以,如果它们在同一行,则从列表中排除

以下是我将添加到的函数:

var flatUniqArr = colValueArr.map(function(e){return e[0].toString();})
.filter(function(e,i,a){
  return (a.indexOf(e) == i && !(visibleValueArr.some(function(f){
    return e.search(new RegExp(f,'i')) + 1;
  })));
});
return flatUniqArr;
其中
flatUniqArr
是隐藏值列表
colValueArr
是一列中的值数组
visibleValueArr
是用户输入的名称,
memberType
将是成员类型

尝试使用Liora的解决方案:(更新…现在可以使用了)

var flatUniqArr=[]
变量行=[]
Logger.log(visibleValueArr)
Logger.log(成员类型)
对于(变量i=0;i
现在可以了。但似乎有很多代码。如果其他解决方案更快和/或更少的代码行,我会乐于接受


更新:添加了
.toString().toLowerCase()
,因为用户可以输入小写值。

如何使用用户输入构建正则表达式

function search(line, employeeType, employeeName) {
    var regexp = '/' + employeeType + ': ' + employeeName + '/'
    return line.search(regexp)
}

或者更好的是,如果它总是出现在字符串的开头,只需使用

我假设所有行都有这种格式

如果使用分隔符拆分每行“:”

那你就有了

array[0] //the current role
array[1] //the list of name
array[2] //the email
然后你可以检查每个人的名字

if(array[0] == "Team Lead" && array[1].indexOf("last2") != -1)
具有linesplit的示例:

var lines = value.toString().split("\n");
var found = false;
for(var i = 0; i < lines.length ; i++){
    var data = value.split(":")
    if(data[0] == "Team Lead" && data[1].indexOf("last2") != -1){
         found = true;
    }
}
var lines=value.toString().split(“\n”);
var=false;
对于(变量i=0;i
你到底想要什么?担任某一职位的人的姓名?某个名字的人的职位是什么?@Luca我用更多信息更新了我的问题。如果这有助于回答您的问题,请告诉我。本质上,我只是想知道它是否存在于单元格中,以便从我正在构建的列表中忽略它。它并不总是出现在字符串的开头。所有的线都在一个单元内。我可能要求的是
Team Lead
,它可能不是单元格的第一行。在这种情况下,原始regex解决方案应该可以。根据您的描述,用户同时给出了employee type和name,因此我们可以在每一行或使用多行标记Yes搜索employeeType:employeeName。它们提供名字或姓氏。我相信您的解决方案是期望完整的employeeName,对吗?还有,是否有办法将其与我的代码中已经包含的新RegExp(f,'I')
合并。是的,所有单元格的格式都相同。所有行都具有相同的结构。这是否适用于具有多行的单元格?它会将第二行的当前角色放在
数组[3]
中吗?不,您必须先拆分这些行。我会在回答中加上一个例子。谢谢你的快速回复。我将致力于将其中一个解决方案与我已有的解决方案结合起来。我会选择一个答案。谢谢使用
if(found==false)
而不是
if(found=false)
,否则它总是将false设置为found,并且从不输入if
array[0] //the current role
array[1] //the list of name
array[2] //the email
if(array[0] == "Team Lead" && array[1].indexOf("last2") != -1)
var lines = value.toString().split("\n");
var found = false;
for(var i = 0; i < lines.length ; i++){
    var data = value.split(":")
    if(data[0] == "Team Lead" && data[1].indexOf("last2") != -1){
         found = true;
    }
}