2011-07-21 143 views
3

在回答我的問題之一,有人貼出:瞭解正則表達式?

// could replace it with an easier to work with delimiter 
str.replace(/(;)(?![";"])/g, '|') 

// or split it, but skip over results that are just a ; 
var strArr = str.split(/(;)(?![";"])/); 
for (s in strArr) { 
    if (strArr[s] !== ";") { 
     // do something with strArr[s] 
     console.log(strArr[s]); 
    } 
} 

我在/(;)(?![";"])/完全喪失。它看起來像一堆隨機符號給我:(

我在哪裏可以瞭解更多有關正則表達式語法

+0

http://www.regular-expressions.info/和https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions –

回答

6

有各種資源:?

至於實際的表情,/文字標記的正則表達式文本的開始和結束(如引號的字符串做,雖然結束/可以跟隨標誌),然後輸入:

  +------------- 1 
    |+------------ 2 
    ||+----------- 3 
    ||| +--------- 4 
    ||| | 
    ||| | 
    ||| | +------- 5 
    ||| | | +----- 6 
    ||| | | | +--- 7 
    ||| | | | |+-- 8 
    |||/ \|/ \|| 
    /(;)(?![";"])/
  1. (在這種情況下(因爲(後面沒有?=,或!它改變它做什麼)
  2. 0開始捕獲組
  3. ;是文字,它分號
  4. )結束捕獲組
  5. (?!啓動「負前瞻」,所以整個表達式只有在括號裏面有什麼分號後沒有找到匹配匹配
  6. [開始一個字符類,它與其中的任何字符匹配
  7. ";"是字符類中的字符。 (第二個"是多餘的。)字符類包含;"
  8. ]結束字符類
  9. )結束負先行於一切都開始於#4

所以,比賽(和捕獲)分號只要它不是通過報價或分號緊隨其後。我無法看到捕獲分號的任何特定原因,但也許在推薦此問題的背景下有一個原因。