首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为每个句子创建一个正则表达式,以证明几个句子特定关键字的存在?

如何为每个句子创建一个正则表达式,以证明几个句子特定关键字的存在?
EN

Stack Overflow用户
提问于 2022-04-07 23:13:23
回答 1查看 40关注 0票数 1

我想扫描的文字是:“你今天为什么来这里?”(关键词是“为什么”“你”“来”“这里”“今天”)

我想构建一个regex表达式,它也可以扫描类似的问题,例如:

  • “你今天是怎么来的?”(关键词是“什么”、“带来”、“你”、“今天”)
  • “今天来的原因是什么?”(关键词是“什么理由”、“来”、“今天”)
  • “你今天早上来这儿有什么原因吗?”(关键词是“理由”、“这里”、“早上”)
  • 你今天为什么在这里?(关键词是“为什么”、“你”、“这里”、“今天”)?

所以就像:/keywords from first sentence | keywords from second sentence | keywords from third sentence | etc... /ig

如果上面的正则表达式是真的(使用.test),那么用户将成为alerted

我尝试使用以下方法:/(?=.*\bwhat's\b)(?=.*\bbrought\b)(?=.*\byou\b)(?=.*\btoday\b)|(?=.*\bwhy\b)(?=.*\byou\b)(?=.*\bhere\b)(?=.*\btoday\b)/ig。因此,询问哪个问题并不重要,因为不管执行的函数是相同的(我需要的只是匹配的关键字!)

我想要构建一个正则表达式,它可以扫描所有这些短语中的关键字,然后,如果关键字匹配,将执行一个函数。如果有人对创建这样一个正则表达式的主题/读物有任何建议,那就太棒了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-08 00:22:17

@PeterSeliger,您对我从哪里开始创建这样一个解决方案有什么建议吗?- sb2021 1/2工作解决方案需要一个regex,用于将多行字符串转换为(行)字符串数组。还需要一个数组,其中每个嵌套的行/句子的数组保存关键字。。 三分之二..。然后要检查新行的数组,every单行是否与关键字条件匹配。回调函数必须返回一个布尔值,然后需要检查every行相关关键字是否是当前处理行的一部分。该任务的回调函数将利用动态创建正则表达式 . 3/3 ..。它使用标志以便以不区分大小写的方式存在关键字(ignore大小写).由于OP的一个用例,您会遇到比较"What's""what's"的情况

代码语言:javascript
复制
const sampleMultilineData =
`What's brought you here today?
What is the reason for coming in today?
Is there a reason you are here this morning?
Why are you here today?`;

const listOfKeywordLists = [
  ["what's", "brought", "you", "today"],
  ["what", "reason", "coming", "today"],
  ["is", "reason", "here", "morning"],
  ["why", "you", "here", "today"],
];

const isEveryLineContainsAllOfItsKeywords = sampleMultilineData
  // create array of separte lines
  // from the multiline string data.
  .split(/\n/)
  // wheter every single line matches the keyword criteria.
  .every((line, lineIndex) =>

    // access the line related keyword list via `lineIndex`.
    listOfKeywordLists[lineIndex]
      // wheter a line contains every keyword
      // with word boundaries (`\b`) to the keyword
      // in a case insensitive (`i` flag) way.
      .every(keyword =>
        RegExp(`\\b${ keyword }\\b`, 'i').test(line)
      )

      // // works case sensitive, thus the result is `false`.
      //.every(keyword => line.includes(keyword))
  );

console.log({ isEveryLineContainsAllOfItsKeywords });
代码语言:javascript
复制
.as-console-wrapper { min-height: 100%!important; top: 0; }

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71789929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档