【问题标题】:Regular Expression in java and javascriptjava和javascript中的正则表达式
【发布时间】:2012-05-15 15:34:48
【问题描述】:

我有一个用 Java 构建的正则表达式。

String expr = "<a.*?id=\"(pres.*?)\".*?>Discharge.*?Medications:</a>";

我想在 Javascript 中使用相同的正则表达式。 会不同还是一样?

【问题讨论】:

标签: java javascript regex


【解决方案1】:

我建议你不要这样做。

为什么?我将向您指出 StackOverflow 上最受欢迎的答案之一:https://stackoverflow.com/a/1732454/851498

在 javascript 中,您最好使用 DOM 而不是正则表达式来解析 HTML。

例子:

var a = document.querySelectorAll('a');
for ( var i = 0, len = a.length; i < len; i++ ) {
    // If the id starts with "pres"
    if ( a[ i ].id.substr( 0, 3 ) === 'pres' ) {
        // check a[ i ].textContent
    }
}

或者,如果您使用的是 jQuery:

$('a').each( function() {
    if ( this.id.substr( 0, 3 ) === 'pres' ) {
        // check $( this ).text()
    }
} );

我没有编码最后一部分,但你明白了。在 $( this ).text() 上使用正则表达式就可以了,它不是 HTML。

【讨论】:

  • 所以是的,这意味着......当我需要解析 html 时使用正则表达式不是一个好主意,对吧?
  • 完全正确 :) HTML 无法用正则表达式正确解析,请参阅链接以获取示例。
  • @SoftwareGuruji 不,尤其是在浏览器中,您可以轻松地将字符串转换为可查询的 dom。 var root = document.createElement("div"); root.innerHTML = "&lt;a id='pres'&gt;&lt;/a&gt;"; console.log( root.firstChild.id)
【解决方案2】:

没有太大的不同。 JavaScript 中的正则表达式介于 / 之间。所以它看起来像这样:

var expr = /<a.*?id=\"(pres.*?)\".*?>Discharge.*?Medications:</a>/;

编辑,错误的斜线。哎呀。

【讨论】:

  • @thagorn 刚刚注意到我自己 :)
【解决方案3】:

或者,您可以这样做:

var expr = new RegExp("<a.*?id=\"(pres.*?)\".*?>Discharge.*?Medications:</a>");

有关 JavaScript 中 RegExp 的更多详细信息,请参阅 MDN 文档: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

【讨论】:

    【解决方案4】:

    这将是相同的。所有主流的正则表达式引擎都支持相同的正则表达式基本语法。有些人在顶部添加了自己的功能,但您的示例并没有做任何奇怪的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多