2014-10-18 117 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