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

时间:2018-08-07 18:32:46

标签: javascript google-apps-script

我需要对函数进行一些修改,以允许在值的一行上搜索两个字符串。我正在尝试自己完成这项工作,但我需要一些帮助。这是查看单元格值的示例。假设没有前导或尾随的换行符。而且,所有单元格都具有相同的格式。相同的行数,相同的成员类型结构:最后一个,第一个,等等。

enter image description here

说我想看看此单元格是否包含名称为team lead的{​​{1}}或名称为last2的{​​{1}}。雇员的类型和姓名都将由用户输入。

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

Manager

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

first4

这就是我被困住的地方。它将索引返回到第一行的最后一位。

我的想法是,如果冒号遵循用户输入的成员类型,则在冒号之间搜索用户输入的名称。我该怎么做?

说明: 最终目标是验证名称和成员类型是否在同一行上,并从我为indexOf(':(.*):') 构建的数组中排除。因此,如果它们在同一行上,则从列表中排除。

这是我将其添加到的功能:

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是成员类型。

尝试使用Liora解决方案:(已更新...现在可以使用)

visibleValueArr

现在可以使用。虽然看起来好像很多代码。如果它们是更快和/或更少的代码行,我将接受替代解决方案。

已更新:添加了memberType,因为用户可以输入小写字母值。

2 个答案:

答案 0 :(得分:1)

仅使用用户输入来构建正则表达式怎么样?

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

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

答案 1 :(得分:1)

我假设所有行都采用这种格式。

如果用分隔符“:”分隔每一行

    CONTRACT_ID                    NPV                       
0     1                            90                  

1     2                            130                   

2     3                            105                 
    ...

那你就拥有

var array = value.split(":")

然后您可以检查每个名称

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)