检查子字符串是否存在于另一个字符串regex中

时间:2016-12-06 08:28:31

标签: javascript regex string

我有两个字符串:

var first = "913 DE 6D 3T 222"
var second = "913 DE 3T 222"

我想检查second中是否存在first,最好是 regex 。问题是,indexOfincludes会在second中返回first ,这是错误的(只有6D是区别):

first.indexOf(second)
-1

first.includes(second)
false

3 个答案:

答案 0 :(得分:3)

使用String#splitArray#every方法。



var first = "913 DE 6D 3T 222";
var second = "913 DE 3T 222";

console.log(
  second
  // split the string by space
  .split(' ')
  // check all strings are contains in the first
  .every(function(v) {
    return first.indexOf(v) > -1;

    // if  you want exact word match then use regex with word
    // boundary although you need to escape any symbols which
    // have special meaning in regex but in your case I think all are 
    // alphanumeric char so which is not necessary

    // return (new RegExp('\\b' + v + '\\b')).test(first);
  })
)




仅供参考:对于较旧的浏览器,请检查polyfill option of every method

答案 1 :(得分:1)

这是一个更优雅的解决方案。

首先,我正在使用map功能。在我们的例子中,它返回一个类似这样的数组:

[true,true,true,true]。然后,使用reduce函数和logical operators,我们将获得一个值。如果数组包含至少一个false值,则最终结果将为false

var first = "913 DE 6D 3TT 222";
var second = "913 DE 3T 222";
console.log(second.split(' ').map(function(item){
    return first.includes(item);
}).reduce(function(curr,prev){
    return curr && prev;
}));

答案 2 :(得分:0)

使用String.match()函数和特定正则表达式模式的解决方案:

我已更改first字符串以构成更复杂的案例,重复DE个值。



var first = "913 DE 6D 3T 222 DE",
    second = "913 DE 3T 222",
    count = second.split(' ').length;

var contained = (count == first.match(new RegExp('(' + second.replace(/\s/g, "|") + ')(?!.*\\1)', "gi")).length);
console.log(contained);




(?!.*\1) - 为避免重复匹配是负面的先行断言