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