Regex在已知单词之间匹配多个短语



我正在尝试在已知单词之间匹配多个短语。

从本质上讲,我想解析用户在括号内填写的内容:获取[名称]、[持续时间]和[位置]的信息。我想获得用户输入的名称、持续时间和位置。如果他们只输入名称,而不输入持续时间和地点,那也没关系。或者,如果他们输入了名称和持续时间,但没有输入位置。只要分析出他们输入的内容,如果有的话。

因此,假设用户输入的语句是:

  1. 获取John的信息->我想解析出John
  2. 获取John Doe过去6个月的信息->我想分析一下约翰·多伊过去6个月
  3. 为地球获取John Doe过去6个月的信息->我想解析出无名氏过去6个月地球

到目前为止,我最好的尝试是:

Get information for (.+?(?=for|$))(?:for)?(.+?(?=for|$))?(?:for)?(.*)

编辑:没有必要";对于";是区分单词。

例如,考虑短语:

获取[持续时间]中[位置]的[名称]信息。

并假设用户输入:

在上个月为地球获取有关无名氏的信息。

现在,如果我仍然在";对于";,代码不起作用。

所以我需要一个通用的解决方案。

编辑2:

从一般意义上讲,问题是,如果未知短语和已知短语交错,我如何解析出未知短语?例如:

已知短语1未知短语1未知短语2未知词组2等等

更糟糕的是,有时已知短语是相同的(在我的例子中,已知短语是"for"(。因此,我不能简单地尝试使用类似knownPhrase1(.*(knownPhrase 2 的东西来获取两个已知字符串之间的未知字符串

如何确定未知短语?

您可以使用split(/sfors/)来实现这一点,使用slice(1)来获得除第一个以外的所有片段"获取信息";。

const parsedData = (str) => {
return str.split(/sfor|about|ins/).slice(1).join(', ');
}
console.log(parsedData('Get information for John'))
console.log(parsedData('Get information for John Doe for last 6 months'))
console.log(parsedData('Get information for John Doe for last 6 months for Earth'))

最新更新