2012-08-13 38 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('+');