有没有一种有效的方法来使用正则表达式从 HTML 字符串中提取数据? [复制]

Posted

技术标签:

【中文标题】有没有一种有效的方法来使用正则表达式从 HTML 字符串中提取数据? [复制]【英文标题】:Is there an efficient way to use regular expressions to extract data from an HTML string? [duplicate] 【发布时间】:2021-03-10 21:21:59 【问题描述】:

我会做这一切都是 node.js 在我的场景中,我有一个 html 字符串,它包含这个字符串:

// there is html code above ^^^
<input type="hidden" name="token" id="token" value="MTYwNjU1NzAwOHRor9RCGkXDyFBLI7HUPCwb-v46P012KayHiFSHTKDdW7CUBvjiKTHoC3lVtRBOBIGwSRA4_ojvfiG3Khnsd54." />
//and html code below vvv

是否有一个正则表达式可以只提取令牌的值?例如:

MTYwNjU1NzAwOHRor9RCGkXDyFBLI7HUPCwb-v46P012KayHiFSHTKDdW7CUBvjiKTHoC3lVtRBOBIGwSRA4_ojvfiG3Khnsd54.

我也研究过 html 解析 npm 模块,没有这样的运气。

【问题讨论】:

【参考方案1】:

你可以通过这个方法来设置这个值:

let inputValue = getElementById(token).value;

【讨论】:

您好,感谢您的评论,但我犯了一个错误,我没有读取本地 html 文件,我正在从一个网站的获取请求中读取 response.body @djsnoob 如果我理解你的话,你是不是要请求服务器并在值属性中获取带有令牌的 html 标记?但是你为什么不直接得到里面有这个令牌的对象呢?还是我不对? 因为我很确定 get 请求返回一个字符串,因此我要求使用正则表达式 @Danil Sadonov @djsnoob 但如果你通过服务器的响应得到它,顺便说一下,你会得到它的字符串,你只需得到或“【参考方案2】:

是的,正则表达式相当简单。


const htmlString = '<input type="hidden" name="token" id="token" value="MTYwNjU1NzAwOHRor9RCGkXDyFBLI7HUPCwb-v46P012KayHiFSHTKDdW7CUBvjiKTHoC3lVtRBOBIGwSRA4_ojvfiG3Khnsd54." />';
const regex = new RegExp("value=\"(.*?)\"");
result = regex.exec(token)[1];

在简单的英语中,正则表达式的工作原理是搜索 html 字符串,直到找到字符 value=",然后它拾取所有下一个字符,直到下一个 "。查看正则表达式本身以更清楚地解释:

regex = "value=\"(.*?)\""

\" 搜索双引号字符。斜杠转义双引号,因此 javascript 不会错误地认为您正在结束字符串。

.*? 周围的括号是匹配组。我们之所以称结果的第一个元素,即result = regex.exec(token)[1],是为了拉出匹配组

. 匹配所有字符,* 匹配任意数量的字符,? 使其不贪心,因此它停在下一个引号处。

【讨论】:

【参考方案3】:

我还研究了 html 解析 npm 模块,没有这样的运气。

您可以使用例如jsdom:

const jsdom = require("jsdom");
const  JSDOM  = jsdom;
const dom = new JSDOM(`<input type="hidden" name="token" id="token" value="MTYwNjU1NzAwOHRor9RCGkXDyFBLI7HUPCwb-v46P012KayHiFSHTKDdW7CUBvjiKTHoC3lVtRBOBIGwSRA4_ojvfiG3Khnsd54." />`);
let elm = dom.window.document.getElementById("token");
if (elm) console.log(elm.value);

输出

MTYwNjU1NzAwOHRor9RCGkXDyFBLI7HUPCwb-v46P012KayHiFSHTKDdW7CUBvjiKTHoC3lVtRBOBIGwSRA4_ojvfiG3Khnsd54.

【讨论】:

以上是关于有没有一种有效的方法来使用正则表达式从 HTML 字符串中提取数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

从 html 代码中解析链接的正则表达式

从主机名中提取域名

正则表达式语法

Python常用的正则表达式处理函数

python字符串替换的2种有效方法

使用 Java + 正则表达式从文本文档中提取 URL