2014-10-18 79 views
2

我有以下字符串:|Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|正则表达式匹配(Javascript)

我想写只匹配项包含单词Africa或其任何deriative(所不同的是|Mafricano||Go Mafricano Go|含义是所有条款正则表达式,每学期在两个|之间封闭。

现在我已经出来:/\|[^\|]*africa[^\|]*\|/gi,它说:


  1. \| 比赛|

  • [^\|]* 匹配零到任意字符的无限实例除了|

  • africa 字面上匹配africa

  • [^\|]* 匹配零到任意字符的无限实例除了|

  • \| 匹配|

  • 我试过插入((?:\s)|(?!\w))使其成为/\|[^\|]*((?:\s)|(?!\w))africa[^\|]*\|/gi。虽然它排除了|Mafricano||Go Mafricano Go|,但它也排除除|West Africa||Go Africa Go|之外的所有其他条目。所以这很好,但它也需要包括所有单个单词Africa及其派生形式。

    任何人都可以帮助我吗?

    +0

    你为什么不使用'replace'?它应该更容易。 – Kai 2014-10-18 08:33:48

    +0

    @JhKaiz,@AvinashRaj:我需要一个所有匹配项的数组,因此我将使用'match()'函数 – AKG 2014-10-18 08:36:21

    回答

    4

    你可以使用这个表达式

    [^|]*\bAfrica[a-z]*\b[^|]* 
    

    DEMO

    var str = "|Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|"; 
    var arr = str.match(/[^|]*\bAfrica[a-z]*\b[^|]*/g); 
    console.log(arr); // ["Africa", "Africans", "African Society", "Go Africa Go", "West Africa"] 
    
    +0

    太棒了!谢谢! – AKG 2014-10-18 09:33:52

    1

    我想你想这样的事情,

    \|(?:(?!Mafrica|\|).)*?africa(?:(?!Mafrica|\|).)*?\| 
    

    DEMO

    > "|Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|".match(/\|(?:(?!Mafrica|\|).)*?africa(?:(?!Mafrica|\|).)*?\|/gi); 
    [ '|Africa|', 
        '|Africans|', 
        '|African Society|', 
        '|Go Africa Go|', 
        '|West Africa|' ] 
    

    不要忘记打开i修改做一个区分大小写的匹配。

    说明:

    \|      '|' 
    (?:      group, but do not capture (0 or more 
             times): 
        (?!      look ahead to see if there is not: 
        Mafrica     'Mafrica' 
        |      OR 
        \|      '|' 
    )      end of look-ahead 
        .      any character except \n 
    )*?      end of grouping 
    africa     'africa' 
    (?:      group, but do not capture (0 or more 
             times): 
        (?!      look ahead to see if there is not: 
        Mafrica     'Mafrica' 
        |      OR 
        \|      '|' 
    )      end of look-ahead 
        .      any character except \n 
    )*?      end of grouping 
    \|      '|' 
    
    +0

    这些条目比'Mafricano'更方便,更随机,所以这不会缩放其他条目。不过谢谢。 – AKG 2014-10-18 09:33:04

    +0

    但你没有在你的问题中提到这个.. – 2014-10-18 09:35:22

    +0

    我对此表示歉意。我认为这是暗示的。 – AKG 2014-10-18 09:36:50