javascript - Google Script,如何在我的正则表达式搜索字数限制中包含带撇号的字词?
问题描述
这里非常缺乏经验的编码器,我最近得到了一个脚本,它使用正则表达式来搜索在特定字数限制内出现的两个不同的单词。所以我可以搜索出现在 10 个单词内的“the”和“account”,然后我的脚本会打印它出现的句子。但是,我最近发现如果“the”和“account”之间的任何单词包含撇号,我的代码无法找到这种情况。例如,如果我想找到一个包含“the”和“account”的句子,例如:“I am here to check why the money is not in my account”那么我的脚本将无法工作,因为撇号词, “不是”,介于我的搜索词“the”和“account”之间。如果这还不够清楚,请不要 犹豫不决评论和询问。这是我的脚本:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var historySheet = ss.getSheetByName('master');
var resultsSheet = ss.getSheetByName('results');
var totalRowsWithData = historySheet.getDataRange().getNumRows();
var data = historySheet.getRange(1, 1, totalRowsWithData, 3).getValues();
var regexp = /\W*(the)\W*\s+(\w+\s+){0,10}(account)|(account)\s+(\w+\s+){0,10}(the)/i;
var result = [];
for (var i = 0; i < data.length; i += 1) {
var row = data[i];
var column = row[0];
if (regexp.exec(column) !== null) {
result.push(row); }}
if (result.length > 0) {
var resultsSheetDataRows = resultsSheet.getDataRange().getNumRows();
resultsSheetDataRows = resultsSheetDataRows === 1 ? resultsSheetDataRows : resultsSheetDataRows + 1;
var resultsSheetRange = resultsSheet.getRange(resultsSheetDataRows, 1, result.length, 3);
resultsSheetRange.setValues(result);}}
解决方案
鉴于您的示例,罗杰的回答将不起作用,因为两个单词之间的字母也超过 10 个字符。将 Roger 的示例更改为:
/\W*(the)\W*\s+([\w']+\s+){0,15}(account)|(account)\s+([\w']+\s+){0,15}(the)/i
将工作。
一种有助于稍微控制返回的变体,提取您的示例字符串并为中间的单词提供更多可能性。我将字母计数增加到 25 并将其更改为允许任何字符,并?
在末尾添加量词以捕获出现的 0 或 1,这可能有助于消除误报,让您的正则表达式在其他匹配项中找到匹配项:
/(the.{0,25}?account)|(account.{0,25}?the)/gim
您目前周围有捕获组the
,account
鉴于您提供的示例,我认为这不是您想要的。在上面的示例中,我将捕获组放在整个短语周围,因为这就是您要捕获的内容。
根据字符串在电子表格中的方式,变化可能是:
/(the.*?account)|(account.*?the)/gi
这不会限制模式中的字母数量,并且通过将量词添加?
到末尾将不允许它跨越匹配的组。
最后,\W*
开头的 可能会导致一些问题,在我更简单的示例中,我添加了“多行”标志以允许您使用的字符串中是否存在换行符。
推荐阅读
- selenium - Selenium 上的 Xpath 问题?
- powershell - Powershell 解决方案:运行旧版 Powershell 不支持的模块
- excel - 在 Excel 中使用文本函数
- bash - 从数字中删除前导 0 会导致值发生变化
- cmake - 如何将编译器优化标志添加到项目中的特定文件?
- java - Android EditText setEnabled(false) isn't working
- aptana - aptana Studio 3 出现问题
- llvm - 'PointerType' 对象没有属性 'type'
- oracle - Oracle Apex 条件链接
- c - (交叉)在clang的windows上编译64位程序集(来自linux)