2012-11-30 55 views
1

我相信這是真的很容易,但我怎麼搭配如何在先行表達式匹配線和空白的開始

  1. 比賽無論是線上還是空白
  2. 比賽開始AZ
  3. 比賽行末或空白

我只想返回產品編號。 2所以以下字符串

"one 1.ignore two 2ignore ignore3 three" 

表達將返回

["one","two","three"] 

感謝

+1

對於項目#1,您需要lookbehind,這在javascript中不受支持。 – Bergi

+0

這似乎是這樣一個直截了當的要求。但有一點要說。也許有人可以找到解決這個問題的辦法。 – Bruno

回答

0

使用此代碼:

var str = 'one 1.ignore two 2ignore ignore3 three'; 
str = str.replace(/\s(?=[a-z])/ig, function(text, p1) { 
    return p1 ? p1 : text; 
}); 

var arr = str.match(/([a-z]+)(?=\s|$)/ig); 
+0

剛剛在Chrome中嘗試了你的表達,它返回'[「one」,「two」,「three」]''。我不希望表達式在之前或之後返回任何空格。 – Bruno

+0

噢好吧,編輯我的答案,現在檢查它。 – anubhava

+1

javascript不支持後退效果。 – Anirudha

2

您需要回顧後的正則表達式匹配這些項目,這在javascript中不受支持。要麼你做手工迭代和提取匹配的組(這表現在@ Some1.Kill.The.DJ),或者你會分裂,而不是匹配的字符串:

str.split(/\s+(?:\S*?(?![a-z])\S+\s+)*/); 

這個表達式不匹配所有空格結合包含至少一個不是[a-z]的字符。但是,這個正則表達式很複雜,不容易維護。它也有時會產生空字符串。更好的是,做類似

str.split(/\s+/).filter(RegExp.prototype.test.bind(/^[a-z]+$/)); 
相關問題