How do you check if a string contains ALL strings from another array? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
CupTools
V2EX    Javascript

How do you check if a string contains ALL strings from another array?

  •  
  •   CupTools 2016 年 4 月 25 日 3053 次点击
    这是一个创建于 3568 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Say I have some strings,

    var string1 = "hey this is jack and michael"; var string2 = "hey this is jack and jenny"; 

    And I have an array of strings:

    var arr = ['jack', jenny']; 

    How do you write a function so that:

    fn(string2, arr); // true fn(string1, arr); // false 

    Kind of like String.indexOf() or regex with a|b|c, but no individually.

    第 1 条附言    2016 年 4 月 25 日

    渣渣...

    function containsAll(haystack, needles){ for (var i = 0; i < needles.length; i++){ if (haystack.indexOf(needles[i]) === -1) return false; } return true; } 
    10 条回复    2016-04-25 22:21:10 +08:00
    ershisi
        1
    ershisi  
       2016 年 4 月 25 日   1
    虽然不知道为什么要用英文。你的数组缺少一个闭合。
    另外最简单的办法,如果你的字符串都是以空格分隔的。那就把第一个 string 参数分割成数组。然后再去判断。用不着正则的感觉。。。
    Magic347
        2
    Magic347  
       2016 年 4 月 25 日   1
    python 版:

    def fn(str, arr):
    ____return all(x in str for x in arr)
    CupTools
        3
    CupTools  
    OP
       2016 年 4 月 25 日
    @ershisi 中文太差 表达不清
    spance
        4
    spance  
       2016 年 4 月 25 日
    这个其实就是多模式匹配,比较好的方法是使用 W-M 或者 A-C 算法可以做到 O(m+n),或者没啥要求或者数量较小就像最后那个 for 里面逐个查找也可以。
    jyyyxy
        5
    jyyyxy  
       2016 年 4 月 25 日
    java 版 BiPredicate<String, List<String>> fun = (str, arr) -> arr.stream().allMatch(str::contains);
    xjp
        6
    xjp  
       2016 年 4 月 25 日
    arr.every((s) => string1.contains(s));
    murmur
        7
    murmur  
       2016 年 4 月 25 日
    AC 自动机 应该有 java 版的
    zhujinliang
        8
    zhujinliang  
       2016 年 4 月 25 日
    Javascript:

    function containsAll(haystack, needles) {
    return !!haystack.match(new RegExp('('+needles.join('|')+')'));
    }
    pollow
        9
    pollow  
       2016 年 4 月 25 日
    我还以为进来能看到有人讨论 AC 自动机,没想到一群写循环的……
    7jmS8834H50s975y
        10
    7jmS8834H50s975y  
       2016 年 4 月 25 日
    VIML

    let s:str1 = "hey this is jack and michael"
    let s:str2 = "hey this is jack and jenny"
    let s:list = ['jack', 'jenny']

    fu! s:checkstr(str,list)
    if 0 < index(split(a:str,' '),a:list[0]) && index(split(a:str,' '),a:list[0]) < index(split(a:str,' '),a:list[1])
    return "true"
    else
    return "false"
    endif
    endf

    echom s:checkstr(s:str1,s:list)
    echom s:checkstr(s:str2,s:list)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1995 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:46 PVG 18:46 LAX 02:46 JFK 05:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86