2017-06-19 18 views
-2

正則表達式與He/She正則表達式用他來代替他或她/她

更換HeShe我有以下情況:前行 線

  • 結束
    1. 開始或標點符號後

    我試過這個

    str.replace(/((\s|^|/[^!-~]/)He($|\s|/[^!-~]/)|(\s|^|/[^!-~]/)She($|\s|/[^!-~]/))/g, "He/She") 
    

    這是拋出異常...我正在使用JavaScript。

  • +2

    你可以添加正在拋出的異常嗎? –

    回答

    0

    ,我們在您的正則表達式的一些錯誤:您已在多個轉義斜槓(/),這實際上是沒有必要的。我簡化和改進你的正則表達式了一下,就可以直接使用它像這樣:

    (\s|^|[^!\-~])(He|She)($|\s|[^!\-~]) 
    

    ,取而代之的是:

    $1He/She$3 
    

    在JavaScript中,這將是這樣的:

    var text = "He went to school"; 
     
    var result = text.replace(/(\s|^|[^!\-~])(He|She)($|\s|[^!\-~])/g, '$1He/She$3'); 
     
    console.log(result);

    這將匹配任何ÿ我們的角色(白色空間,!等)之前和之後,你不會失去它,因爲它再次被添加到結果。否則,您需要積極的lookaheads/lookbeheads,這在JavaScript中不受支持(lookbehinds)。

    我可能會添加一些這些字符(例如?.,這都需要進行轉義)的。如果您還想匹配heshe,則必須使用不區分大小寫的標誌i。請注意,替換he然後是He/She與大寫。

    編輯有一個在正則表達式中的錯誤:[^!-~]匹配除字符一切從!直到~(因爲在之間的破折號)。您需要將其轉義爲[^!\-~]


    您也可以只使用單詞邊界,就像這樣:

    var text = "Sheldon went to school with her, but he did not like it."; 
     
    var result = text.replace(/\b(He|She)\b/g, 'He/She').replace(/\b(he|she)\b/g, 'he/she'); 
     
    console.log(result);

    +0

    Javascript編譯器例外:非法字符(null.null.script;第2行)in: var str =「他是好人。她是個好人」。 ($ | - |)|()|($ | - | s | [^! - 〜]),「$ 1He/She $ 2」); –

    +0

    @ T.Bedia你不能只寫一個沒有引號或斜線的正則表達式..我已經添加了一個例子...... –

    +0

    「.She」怎麼樣? –

    1

    我不知道爲什麼你說得那麼複雜。好像你不關心正確的大小寫,所以:

    var str = "He likes to play baseball while she likes riding horses. She thinks baseball is dumb. She doesn't know if he would like to ride horses also... would he?"; 
     
    
     
    console.log(str.replace(/\bs?he\b/ig, 'He/She'));

    (我爲魯鈍一句道歉。)

    \b被用作單詞分隔符。

    s?he匹配「她」或「他」。

    ig用於忽略大小寫並全局搜索。

    +0

    我很在乎這個案子.. –