首页 > 解决方案 > 如何匹配原始字符串中的字符串?

问题描述

我想匹配来自原始字符串的字符串
例如:
假设原始字符串是
"THE QUICK BROWN FOX JUMPS OVER A LAZY DOG."
,另一个字符串是
"QUICK OVER A DOG"
所以如果原始字符串中存在上述字符串的单词,那么它应该返回 true。我怎样才能做到这一点 ?

我已经使用了这种方法indexOf(filter) > -1
,它只有在我给出像
“BROWN FOX”
这样的连续字符串时才有效,但是如果我将“BROWN JUMPS”作为字符串给出,那么它就不起作用了。

var string_1 = "QUICK BROWN";
var string_2 = "QUICK FOX";
// this returns true
if (original.toUpperCase().indexOf(string_1) > -1) {
    console.log("true");
} else {
    console.log("false");
}

// this returns false
if (original.toUpperCase().indexOf(string_2) > -1) {
    console.log("true");
} else {
    console.log("false");
}

那么如何匹配原始字符串中的字符串?

标签: javascript

解决方案


我将匹配两个字符串中的所有单词字符,以获取单词数组,并将原始字符串的单词(要搜索的单词)放入一个集合中。然后检查.everySet中是否存在其他单词之一:

const orig = "THE QUICK BROWN FOX JUMPS OVER A LAZY DOG.";
// if the strings may not have any words in them at all,
// then alternate with the empty array, since the match will be null:
const origWordsSet = new Set(orig.match(/\w+/g) || []);
const verify = str => (str.match(/\w+/g) || []).every(word => origWordsSet.has(word));

console.log(
  verify("QUICK OVER A DOG"),
  verify("QUICK BROWN"),
  verify("QUICK FOX"),
  verify("FOO")
);


推荐阅读