我正在尝试在已知单词之间匹配多个短语。
从本质上讲,我想解析用户在括号内填写的内容:获取[名称]、[持续时间]和[位置]的信息。我想获得用户输入的名称、持续时间和位置。如果他们只输入名称,而不输入持续时间和地点,那也没关系。或者,如果他们输入了名称和持续时间,但没有输入位置。只要分析出他们输入的内容,如果有的话。
因此,假设用户输入的语句是:
- 获取John的信息->我想解析出John
- 获取John Doe过去6个月的信息->我想分析一下约翰·多伊,过去6个月
- 为地球获取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'))