有没有一种有效的方法来使用正则表达式从 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 字符串中提取数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章