【问题标题】:get param value from tag <> using regular expressions使用正则表达式从标签 <> 获取参数值
【发布时间】:2017-02-15 17:06:48
【问题描述】:

请在此任务中帮助我处理正则表达式: 我有字符串:

<tag title = "DESIRED_DATA">

我想获取数据 DESIRED_DATA(使用 Javascript)

变体:

<tag SPACES PARAM_NAME#1 = PARAM_VALUE#1 title = "DESIRED_DATA" PARAM_NAME#N = PARAM_VALUES#N>

<tag SPACES title='DESIRED_DATA' SPACES>

我的字符串的组成部分:

开始:&lt;tag

结束:&gt;

"" 或 '' 中的标题值

【问题讨论】:

  • 用正则表达式解析 HTML 是出了名的困难......为什么不将 HTML 字符串转换为 JS DOM 对象,然后以这种方式提取数据?
  • 这段代码是在浏览器中运行还是在服务器(node.js)上运行?

标签: javascript regex search tags substring


【解决方案1】:

编辑2:考虑到正则表达式不是处理HTML的最佳工具。如果您有权访问 DOM 元素,则可以轻松访问其属性 using jQueryraw DOM

回答您的问题: 如果你有'&lt;tag title = "DESIRED_DATA"&gt;' 作为字符串,你可以使用:

var string = '<tag title = "DESIRED_DATA">';
var matches = string.match(/title\s*=\s*"(\w+)"/);
var data = matches[1];

阅读documentation 了解正则表达式以获得更好的理解。

编辑: 如果单引号/双引号在字符串中的使用是一致的,并且嵌套字符串没有比您描述的更深,您可以使用:

var string = '<tag param = \'title = "xxx"\' title = \'correct title\' param2 = \'trash\'>';
var lastSingleQuote = string.lastIndexOf('\'');
var lastDoubleQuote = string.lastIndexOf('"');
var pattern = lastSingleQuote > lastDoubleQuote
    ? /title\s*=\s*'([^']*)'/ 
    : /title\s*=\s*"([^"]*)"/
var matches = string.match(pattern);
var data = matches[1];

我也考虑了@Makyen 的建议。

【讨论】:

  • 虽然\w+ 将适用于示例数据,但可能的有效内容包含的字符比\w 匹配的字符多得多。最好使用否定字符集(即匹配除特定列表之外的所有字符;例如[^"]*)。
  • @GMunguia,如果 ,您的代码将不起作用
  • 请不要推荐使用正则表达式来处理 HTML。这不是一个好建议。正则表达式无法处理 HTML,并且提供的代码示例似乎表明否则会鼓励人们继续使用最糟糕的工具来完成工作,这至少会适得其反。
  • @Tomalak:我不推荐它。问题是关于正则表达式的,所以我回答了。我将编辑我的答案,以确保阅读它的人都知道这不是这项工作的最佳工具。
  • 这是原则问题。仅仅因为用户问“我想用 B 做 A” 并不足以向他们展示用 B 做这件事的方法,特别是如果 B 是做这件事的最糟糕的方法。毕竟,用户想要做的是 A。如何他们最终会这样做是无关紧要的 - 大多数时候他们只是询问 B,因为他们不知道更好。 (这里肯定是这样。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
相关资源
最近更新 更多