【发布时间】:2017-02-20 13:36:11
【问题描述】:
我们都知道 regExp 可以使用两个字符串中的一个共同词作为匹配标准来匹配两个字符串。这段代码会将 "I like apples" 匹配到 "apples",因为它们都有共同的“apples” .
var str1 = "apples";
var test1 = "I like apples";
var reg1 = new RegExp(str1, "i");
if (test1.match(reg1)) {
console.log(str1 + " is matched");
}
但是如果不是使用单个常用词(或字符串的公共部分)匹配字符串,我需要使用多个常用词匹配两个字符串,这些常用词可能被其他词分隔?让我给你举个例子:
test2 = "我喜欢 juicy 红色 fruits" 应该匹配 str2 = "juicy fruits " 因为test2 包含所有str2 第二个关键词(参见下面的对象),即使它之间还有其他词。
棘手的部分是我无法确切知道字符串是什么,所以我必须动态匹配它们。我不知道的字符串是用户输入字段的值,有很多可能。此值将与存储在此对象中的字符串匹配:
var str2 = {
"red apples": "fruits",
"juicy fruits": "price : $10"
};
因此,无论用户在输入字段中键入什么,当且仅当它包含对象属性之一的所有单词时,它都必须是匹配的。因此,在本例中,“juicy red and成熟fruits”应该匹配第二个对象属性,因为它包含了它的所有关键字。 p>
编辑:我的目标是输出与我匹配的字符串相关的值。在我的示例中,如果第一个键匹配,则应输出“fruits”。如果匹配 'juicy fruits',它应该输出 'price : $10'。获取与对象键关联的字符串是用户必须使用输入搜索它们的原因。
是否可以使用纯 javascript 使用 regExp 来做到这一点?
这是我(糟糕地)尝试做的事情:https://jsfiddle.net/Hal_9100/fzhr0t9q/1/
【问题讨论】:
-
为您要检查的每个单词构建一个前瞻列表,例如
(?=.*\bjuicy\b)(?=.*\bfruits\b) -
str2是一个以"red apples"和"juicy fruits"作为键的对象。test2只有"juicy", "red", and "apples"。我不明白“test2包含所有str2单词......”的说法。我误会了什么? -
@wcarroll :我的句子措辞错误:我想说
test2包含所有str2第二个关键词。我编辑了我的帖子,感谢您指出。 -
@Hal_9100 将字符串化的数字作为
str2对象中的值是怎么回事?那部分我还不清楚。这种数据结构真的有必要吗?
标签: javascript regex