JavaScript Regex Problem - PullRequest
       3

JavaScript Regex Problem

0 голосов
/ 12 мая 2010

Шаблон Csharp Regex:

Regex rg = new Regex("(?i)(?<=>)[^<]+(?=</TD>)");

Шаблон регулярного выражения JavaScript:

var pattern = (?i)(?<=>)[^<]+(?=</TD>);

var result = str.match(pattern);

Шаблон регулярных выражений Csharp работает, но шаблон регулярных выражений javascript не работает, пожалуйста, помогите?

Ответы [ 2 ]

2 голосов
/ 12 мая 2010

Предполагая, что у вас есть фрагмент HTML в виде строки и вы находитесь в браузере, пытаетесь использовать его с помощью JavaScript:

var str = "<TD>33,7</TD><TD>100</TD><TD>20,0</TD>";

var temp = document.createElement("tr");
temp.innerHTML = str;

var tds = temp.getElementsByTagName("td")
for (var i=0; i<tds.length; i++) {
  alert(tds[i].textContent);  // use .innerText in Internet Explorer
}

См? Нет необходимости в регулярных выражениях - в браузер встроен отлично работающий HTML-анализатор, нет необходимости создавать свои собственные. При использовании JavaScript-фреймворка, такого как jQuery, вышесказанное становится еще проще:

$("<TD>33,7</TD><TD>100</TD><TD>20,0</TD>").find("td").each( function() {
  alert( $(this).text() );
});
0 голосов
/ 12 мая 2010

В JavaScript RE нет видоискателей или встроенных модификаторов. Таким образом, мы перемещаем (?i) в конец регулярного выражения: //i. Задний взгляд немного сложнее имитировать, поэтому проще просто принять тот факт, что это невозможно сделать, и вместо этого использовать группу захвата, чтобы найти то, что вам нужно:

var pattern = />([^<]+)<\/TD>/i;
var result = str.match(pattern);

// the match you want is in result[1]

РЕДАКТИРОВАТЬ: Кажется, работает нормально на обеих предоставленных вами строк:

"<td class='asd'>sd</td>".match(/>([^<]+)<\/TD>/i)
// [">sd</td>", "sd"]

Если вы хотите сопоставить несколько элементов в одной строке, вы можете ab использовать метод replace() примерно так:

var textInTds = []; // empty array we will fill up:
"<td>bla1</td><td class='asd'>sd</td>".replace(/>([^<]+)<\/TD>/ig, function($0, $1) {
  textInTds.push($1); // push onto the array
  return $0; // return the original text so that it doesn't destroy the string
});

// textInTds -> ["bla1", "sd"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...