Regex: как получить содержимое из тега inner (используйте javascript)? - PullRequest
5 голосов
/ 12 апреля 2010

содержание страницы:

aa<b>1;2'3</b>hh<b>aaa</b>..
 .<b>bbb</b>
blabla..

я хочу получить результат:

1;2'3aaabbb

соответствует тегу <b> и </b>

как написать это регулярное выражение, используя JavaScript? спасибо!

Ответы [ 5 ]

9 голосов
/ 12 апреля 2010

Lazyanno * * 1002

Если и только если :

  1. у вас есть прочитанное сообщение SLaks (а также предыдущая статья, на которую он ссылается ), и
  2. вы полностью понимаете многочисленные и удивительные способы , при которых извлечение информации из HTML с использованием регулярных выражений может привести к поломке и
  3. вы уверены, что ни одна из проблем не применима в вашем случае (например, вы можете гарантировать, что ваши входные данные никогда не будут содержать вложенные, несовпадающие и т. Д. <b> / </b> теги или вхождения <b> или </b> в пределах <script>...</script> или комментарий <!-- .. --> теги и т. д.)
  4. Вы абсолютно и положительно хотите продолжить извлечение регулярного выражения

... затем используйте:

var str = "aa<b>1;2'3</b>hh<b>aaa</b>..\n.<b>bbb</b>\nblabla..";

var match, result = "", regex = /<b>(.*?)<\/b>/ig;
while (match = regex.exec(str)) { result += match[1]; }

alert(result);

Выдает:

1;2'3aaabbb
8 голосов
/ 12 апреля 2010

Вы не можете проанализировать HTML с помощью регулярных выражений .

Вместо этого вы должны использовать DOM Javascript.

Например (с использованием jQuery):

var text = "";
$('<div>' + htmlSource + '</div>')
    .find('b')
    .each(function() { text += $(this).text(); });

Я заключаю HTML в тег <div>, чтобы найти как вложенные, так и не вложенные <b> элементы.

2 голосов
/ 28 марта 2013
      var regex = /(<([^>]+)>)/ig;
      var bdy="aa<b>1;2'3</b>hh<b>aaa</b>..\n.<b>bbb</b>\nblabla..";

      var result =bdy.replace(regex, "");
      alert(result) ;

См .: http://jsfiddle.net/abdennour/gJ64g/

2 голосов
/ 12 апреля 2010

Вот пример без зависимости jQuery:

// get all elements with a certain tag name
var b = document.getElementsByTagName("B");

// map() executes a function on each array member and
// builds a new array from the function results...
var text = b.map( function(element) {
  // ...in this case we are interested in the element text
  if (typeof element.textContent != "undefined")
    return element.textContent; // standards compliant browsers
  else
    return element.innerText;   // IE
});

// now that we have an array of strings, we can join it
var result = text.join('');
1 голос
/ 08 апреля 2013

Просто используйте «?» символ после создания шаблона для вашего внутреннего текста, если вы хотите использовать регулярные эксперименты. например:

".*" to "(.*?)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...