【问题标题】:Phrase search in string, making correct RegExp字符串中的短语搜索,生成正确的正则表达式
【发布时间】:2014-03-02 01:19:23
【问题描述】:

我会直接开始,这就是我所拥有的:

var SResults = [];
function ActivateSearch(s) {
    SResults = [];

    for (var key in Products){
        if ((' '+Products[key]['n']).search(new RegExp('\\b(('+s+')|('+s+')[s])\\b', 'gi')) > 0) {
            SResults.push(key);
        }
    }
}
ActivateSearch('trampoline cover');

通过这个功能,我尝试在 Products[key]['n'] 中查找单词或短语,这是某种标题 ex。 “蹦床防雨罩 6 英尺长,外加附加功能”。

现在它具有非常基本的工作原理,即在提到的标题中查找搜索短语的每个单词。

问题:

如果有标题蹦床雨罩,并且搜索词是:蹦床罩 - 没有匹配项。

问题:

如何更改正则表达式以匹配上述结果?

【问题讨论】:

  • 您需要一个带有可以理解自然语言的搜索引擎的后端。否则,您需要针对不同的输入自定义正则表达式。
  • 是的,为了解决问题,我将正则表达式更改为: new RegExp('\\b(('+s+')|('+s+')[s])\\b', 'gi')

标签: javascript regex search


【解决方案1】:

另一种选择是 split 并使用带有正向前瞻和单词边界的交替,例如:

^((?=.*\btrampoline\b)|(?=.*\bcover\b)).*$ 

const regex = /^((?=.*\btrampoline\b)|(?=.*\bcover\b)).*$/gmi;
const str = `Trampoline rain cover 6ft lenght plus extras
Rain cover 6ft lenght plus extras
Trampoline rain 6ft lenght plus extras
Cover trampoline rain 6ft lenght plus extras
Covers trampolines rains 6ft lenght plus extras
`;
let m;

while ((m = regex.exec(str)) !== null) {
	m.forEach((match, groupIndex) => {
		if (groupIndex == 0)
			console.log(`Found match, group ${groupIndex}: ${match}`);
	});
}

如果您想探索/简化/修改表达式,它已经 在右上角的面板上进行了解释 regex101.com。如果你愿意,你 也可以在this link看,怎么搭配 针对一些样本输入。


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多