【问题标题】:JavaScript Regex ProblemJavaScript 正则表达式问题
【发布时间】:2010-05-12 13:18:53
【问题描述】:

Csharp 正则表达式模式:

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

JavaScript 正则表达式模式:

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

var result = str.match(pattern);

Csharp 正则表达式模式有效,但 javascript 正则表达式模式不起作用请帮助?

【问题讨论】:

  • 您应该接受对您之前问题的回答。
  • 您正在尝试使用正则表达式解析 HTML。请不要这样做,这是错误、危险且完全没有必要的。
  • @Alsciende 请帮助您的代码不起作用
  • 删除了我明显错误的答案。 [Tomalak 的评论:] JavaScript 正则表达式中既没有后视修饰符,也没有内联修饰符。请更详细地解释您要做什么。字符串从何而来?你对什么价值观感兴趣?
  • JavaScript 没有后视查找。

标签: c# javascript regex


【解决方案1】:

假设您有一个字符串形式的 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 解析器,无需自己制作。当使用像 jQuery 这样的 JavaScript 框架时,上面的事情变得更加容易:

$("<TD>33,7</TD><TD>100</TD><TD>20,0</TD>").find("td").each( function() {
  alert( $(this).text() );
});

【讨论】:

    【解决方案2】:

    JavaScript RE 中没有lookbehinds 或内联修饰符。所以我们将(?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"]
    

    【讨论】:

    • bla1 工作,但其他 'td' sd 不能工作其他 td
    • @oraclee:男孩……你的态度肯定是错误的。如何评论你得到的实际解决方案并回答你被问到的问题,而不是到处乱说“不起作用”和“请帮助”cmets。
    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 2019-05-09
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多