使用Javascript的正则表达式从循环中检索内容

时间:2012-08-13 15:59:04

标签: javascript jquery regex

这看起来很简单,但我从来没有做过正则表达式,所以只是来自JS的正则表达式专家的一个简单问题。

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+ ......等等(可能我需要正则表达式吗?)

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:1)

试试这个:

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

DEMO

答案 1 :(得分:0)

虽然我建议不要parsing HTML with regex,但这足够简单,你应该可以做到。

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

这将捕获"test">标记之后的任何内容,并以4个数字结尾(示例中的年份)。

您的信息在 1 组中以空格分隔。之后,我建议拆分空格以使您的个人元素可以玩。

Play with the regex

答案 2 :(得分: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,"") ); });

答案 3 :(得分: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 `+` 

答案 4 :(得分: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('+');