2012-06-18 29 views
1

我有這樣的文字。javascript正則表達式示例 - 提取直到出現字符?

Mr John Smith , Mr James Smith     +(21)-(21)-12345678, 12345678, 12345678      +(21)-12345678, 12345678, 12345678  SomeTextHereAlso  +(21)-(22)-12345678      www.somewebaddress.co.uk       Some Title, Some Place , Some Town,Some Suburb,  City - 100000 

我想在JavaScript中使用正則表達式提取每個字符串。我發現了一些例子,今天早上他們工作。現在我不知道他們爲什麼不再工作了。

要提取

Mr John Smith , Mr James Smith 

我用這個。

/\S(.*)\+/ and /\S(.*?)\+/ 

這沒有奏效。我無法弄清楚爲什麼。

提取該

+(21)-(21)-12345678, 12345678, 12345678      +(21)-12345678, 12345678, 12345678  SomeTextHereAlso  +(21)-(22)-12345678  

我用這個。

/\+(.*)(?=www.)/ 

這確實奏效。

而對於URL我用

/www(.*?)(?=\s\s)/ 

而這個工程太。

唯一的問題是第一個例子應該提取所有的字符,直到第一個+,但它提取所有的字符,直到最後+。

我查了http://gskinner.com/RegExr/?2tr5t和我在這裏展示的例子工作。有沒有更多類似的例子可以幫助我,因爲我查看了代碼並沒有發現任何錯誤。

如果正則表達式很好,那麼我怎樣才能使用這個例子的IndexOf()方法來提取我想要的?

+0

@ missingno的[解決方案](http://stackoverflow.com/a/11086693/990363)的作品,但它不應該是必要的:而你的第一個例子('\ S(。*)\ +')使用一個*貪婪的量詞*,它將盡可能多地抓住儘可能多的字符,同時仍然匹配,因此以最後一個「+」結尾,第二個('\ S(。*?)\ +')使用一個* lazy量詞*,儘量使用最少的重複次數來嘗試匹配。那個人應該並且在第一個「+」(例如[spec](http://perldoc.perl.org/perlre.html#Regular-Expressions)中停止),我的控制檯也同意這一點。 – kopischke

+0

我用[此解決方案] [1]幫我解決了我的問題。所以我的項目將結合RegEx和IndexOf()方法。 我不知道爲什麼RegEx在這件事上失敗。謝謝你們。 [1]:http://stackoverflow.com/questions/4690617/javascript-to-match-substring-and-strip-everything-after-it – macroscripts

回答

0

ythe文檔超過您可以嘗試[^+]+或者更具體地說^[^+]+

+0

第一個返回null,第二個與其他示例一樣工作。返回所有字符,直到最後一個「+」。 我認爲這可能是我的代碼,但我不知道是什麼。我做的所有其他功能返回的結果就好,只有這一個沒有。 – macroscripts

+0

請在http://gskinner.com/上查看這些信息,對於我給您的樣品適用。 – Rifat

0

那麼,對於第一個例子,你可以禁止內部循環匹配「+」字符,使用否定字符類。

/\S([^+]*)\+/ 

至於提取的比賽中,一個常見的模式是做這樣的事情

var myPattern = /someregex/g; 
var match; 
while((match=myPattern.exec(theString)) !== null){ 
    console.log('the total match', match[0]); 
    console.log('the first grouped parenthesis', match[1]); 
    //and so on 
} 

例如,運行

var regex = /a(\d+)/g; 
var str = ' a100 b200 a300'; 
var match; 
while((match=regex.exec(str)) !== null){ 
    console.log(match) 
} 

打印

["a100", "100"] 
["a300", "300"] 

如果您有任何更多的疑問,我強烈建議更換上MDN

+0

我試過你給我的例子,但我仍然有相同的結果。它'匹配每個單個字符,直到最後的「+」符號,即使我的RegExr說你的解決方案工作。我會試着想出其他的東西,或者嘗試使用IndexOf()方法。 – macroscripts

1

我以前This solution幫我解決我的問題。所以我的項目將結合RegEx和IndexOf()方法。

我不知道爲什麼RegEx在這件事上失敗。謝謝你們。