2012-08-13 36 views
4

這似乎很簡單,但我從來沒有做過正則表達式,所以只是一個來自正則表達式專家JS的簡單問題。正則表達式與Javascript檢索循環內容

var str = '<a href="test">luckyy1</a> born on october 21, 1986 <a href="test">sdf2</a> born on september 22, 1985 <a href="test">erere</a> born on November 23, 1984 '; 

我值成功爲​​:luckyy1sdf2erere

但我需要它作爲luckyy1+october+21+1986,sdf2+september+22+1985,erere+ ...等(可能是我需要的正則表達式吧??)

任何幫助將不勝感激。

+0

你可以使用DOM?或者只是字符串中的html內容? – 2012-08-13 16:02:10

+0

是啊,DOM會很好,到目前爲止使用jQuery獲得$('a')。每個(功能(索引){$ formatformatText + = $(this).text()+ $ delimeter; \t}); – Luckyy 2012-08-13 16:03:46

+0

這些應該是''標記,對吧? – frnhr 2012-08-13 16:10:50

回答

1

試試這個:

str = $("<div/>").html(str).text(); 
str = str.replace(/,?/g, '').replace(/born on?/g, '').split(' ').join('+') 

DEMO

+0

謝謝Raminson – Luckyy 2012-08-13 17:26:47

+0

@luckycool歡迎您。 – undefined 2012-08-13 17:34:36

+0

也許我很小氣,但那不是你要求的輸出。 – Joe 2012-08-13 18:03:08

0

雖然我不推薦parsing HTML with regex,但這足夠簡單,您應該可以做到。

"test"\s*>(.+?\d{4})

,將捕獲一個"test">標籤之後任何事情,並在4個數字(當年你的例子)結束。

您的信息是空間分隔組。之後,我建議在空間上分開來讓你的個人元素與之一起玩。

Play with the regex

+1

感謝真棒鏈接大衛,但想清楚:href是不會被測試總是 – Luckyy 2012-08-13 16:07:48

+0

你需要一些東西來錨定(分隔符):什麼字符串沒有'href'看起來像? – 2012-08-13 16:08:55

+0

大衛,我的意思是href值並不總是「測試」,所以它應該在正則表達式匹配爲「測試」 – Luckyy 2012-08-13 16:17:48

0

基本上,你想剝離html標籤?

這給一試:

var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,""); 

http://css-tricks.com/snippets/javascript/strip-html-tags-in-javascript/

如果你想獲得每個DOM元素單獨的字符串(如你的例子說明),您可以橫向使用jQuery和鋼帶的DOM元素每一個單獨。

編輯:

事情是這樣的:

var $s = jQuery(the_string); 
var result = []; 
$s.each(function(i, item){ result.push($(item).text().replace(/(<([^>]+)>)/ig,"")); }); 
0

嚴格按照你提供的,你可以做這樣的事情的標記:

var values = $('<div><a href="test">luckyy1</a> born on october 21, '+ 
    '1986 <a href="test">sdf2</a> born on september 22, 1985 ' + 
    '<a href="test">erere</a> born on November 23, 1984</div>') 
    .contents() 
    .map(function(){ 
    return $(this).text().replace('born on', '').trim(); 
}).get(); 

console.log(values); // ["luckyy1", "october 21, 1986", "sdf2", "september 22, 1985", "erere", "November 23, 1984"] 

我唯一改變是增加了一個將div包裝成字符串。然後,您可以使用values.join('+')+連接,並在空白處更多地替換字符串。

values.join('+').replace(/\s/g, '+'); // to make all whitespace `+` 
0

這是骯髒的解決方案,但不知何故可以幫助你......

var str = '<a href="test">luckyy1</a> born on october 21, 1986 <a href="test">sdf2</a> born on september 22, 1985 <a href="test">erere</a> born on November 23, 1984 '; 

var r= /<a[^>]*>(.*)<\/a> born on ([\w]*) ([\d]*), ([\d]*) <a[^>]*>(.*)<\/a> born on ([\w]*) ([\d]*), ([\d]*) <a[^>]*>(.*)<\/a> born on ([\w]*) ([\d]*), ([\d]*)/; 

r.exec(str).splice(1).join('+');