Javascript RegEx:获取其他文本所包围的所有文本匹配?

时间:2009-07-24 18:09:40

标签: javascript regex

在JavaScript / JQuery中,我想获得其他文本之间的所有文本。例如,如果HTML文档具有:

<b class="blah">Blah: Some Text 1</b>
<div id="foo"><b class="blah">Blah: Some Text 2</b>

我想得到一个包含'Some Text 1'和'Some Text 2'的数组,因为它们都位于“<b class="blah">Blah:”后跟“</b>

3 个答案:

答案 0 :(得分:1)

由于您提到jQuery,只需选择所有正确的节点并检查其文本。如果你愿意,你可以在这里放一个正则表达式,但不需要它。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$( function(){
    var texts = [];
    $('b.blah').each( function()
    {
      var txt = $(this).text();
      if ( 0 == txt.indexOf( 'Blah:' ) )
      {
          texts.push( txt.substr( 6 ) );
      }
    } );
    alert( texts );
});
</script>

</head>
<body>
  <b class="blah">Blah: Some Text 1</b>
  <div id="foo"><b class="blah">Blah: Some Text 2</b>
  <div id="foo"><b class="blah">Some Text 3</b>
</body>
</html>

或者使用HTML字符串

$( function(){
  var htmlChunk = '<b class="blah">Blah: Some Text 1</b>\n'
    + '<div id="foo"><b class="blah">Blah: Some Text 2</b></div>\n'
    + '<div id="foo2"><b class="blah">Some Text 3</b></div>';

    var texts = [];
    $('b.blah', '<div>' + htmlChunk + '</div>').each( function()
    {
      var txt = $(this).text();
      if ( 0 == txt.indexOf( 'Blah:' ) )
      {
          texts.push( txt.substr( 6 ) );
      }
    } );
    alert( texts );
});

答案 1 :(得分:0)

这在JS中很难,因为没有方便的方法来检索一组全局的paren捕获。像这样的黑客可能有用:

var chunked = text.replace(/.*<b class="blah">(.*?)<\/b>/g, '$1|ARBITRARY_SEPARATOR|');
var chunks = chunked.split(/|ARBITRARY_SEPARATOR|/);
chunks.pop();

答案 2 :(得分:0)

此代码将生成一个文本,其中包含“<b class="blah">Blah:”和“</b>”之间的文本。 在此示例中,“Some Text 1”和“Some Text 2”

var s = '<b class="blah">Blah: Some Text 1</b><div id="foo"><b class="blah">Blah: Some Text 2</b>';

var regex = /<b class="blah">Blah: (.+?)<\/b>/gi;
var result = [];
var e;
while (e = regex.exec(s))
{
  result.push(e[1]);
};