Javascript 使用NodeJS从HTML中提取字符串
这是htmlJavascript 使用NodeJS从HTML中提取字符串,javascript,regex,node.js,Javascript,Regex,Node.js,这是html <iframe width="100%" height="166" scrolling="no" frameborder="no" src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11111111&auto_play=false &show_artwork=true&color=c3000d&
<iframe width="100%" height="166" scrolling="no" frameborder="no"
src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11111111&auto_play=false
&show_artwork=true&color=c3000d&show_comments=false&liking=false
&download=false&show_user=false&show_playcount=false"></iframe>
我用的是NodeJS。我正在尝试提取trackID,在本例中是11111111
跟踪tracks%2F
。执行此操作的最稳定方法是什么
我是否应该使用正则表达式或一些JS字符串方法,如
substring()
或match()
?如果您知道曲目%2F
只会在您可以执行以下操作时出现:
var your_track_ID = src.split(/tracks%2F/)[1].split(/&/)[0];
可能有更好的方法,但对于您的目的来说,这应该很好。如果您知道
曲目%2F
只会在您可以执行以下操作时出现:
var your_track_ID = src.split(/tracks%2F/)[1].split(/&/)[0];
可能有更好的方法,但对于您的目的来说,这应该可以很好地工作。如果曲目id始终是8位数字,并且html没有更改,您可以执行以下操作:
var trackId=html.match(/\d{8}/)如果曲目id始终是8位数字,并且html没有更改,则可以执行以下操作:
var trackId=html.match(/\d{8}/)用正则表达式解析html通常是一个非常糟糕的主意,但这是可以原谅的。为了安全起见,我会查找完整的URL:
var pattern = /w\.soundcloud\.com.*tracks%2F(\d+)&/
, trackID = (html.match(pattern) || [])[1]
用正则表达式解析HTML通常是一个非常糟糕的主意,但这是可以原谅的。为了安全起见,我会查找完整的URL:
var pattern = /w\.soundcloud\.com.*tracks%2F(\d+)&/
, trackID = (html.match(pattern) || [])[1]
您可以使用节点模块[url+jsdom+qs]查找曲目 试试这个
var jsdom = require('jsdom');
var url = require('url');
var qs = require('qs');
var str = '<iframe width="100%" height="166" scrolling="no" frameborder="no"'
+ 'src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11111111&auto_play=false"'
+ '&show_artwork=true&color=c3000d&show_comments=false&liking=false'
+ '&download=false&show_user=false&show_playcount=false"></iframe>';
jsdom.env({
html: str,
scripts: [
'http://code.jquery.com/jquery-1.5.min.js'
],
done: function(errors, window) {
var $ = window.$;
var src = $('iframe').attr('src');
var aRes = qs.parse(decodeURIComponent(url.parse(src).query)).url.split('/');
var track_id = aRes[aRes.length-1];
console.log("track_id =", track_id);
}
});
var jsdom=require('jsdom');
var url=require('url');
var qs=要求('qs');
var str='您可以使用节点模块[url+jsdom+qs]查找轨迹
试试这个
var jsdom = require('jsdom');
var url = require('url');
var qs = require('qs');
var str = '<iframe width="100%" height="166" scrolling="no" frameborder="no"'
+ 'src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11111111&auto_play=false"'
+ '&show_artwork=true&color=c3000d&show_comments=false&liking=false'
+ '&download=false&show_user=false&show_playcount=false"></iframe>';
jsdom.env({
html: str,
scripts: [
'http://code.jquery.com/jquery-1.5.min.js'
],
done: function(errors, window) {
var $ = window.$;
var src = $('iframe').attr('src');
var aRes = qs.parse(decodeURIComponent(url.parse(src).query)).url.split('/');
var track_id = aRes[aRes.length-1];
console.log("track_id =", track_id);
}
});
var jsdom=require('jsdom');
var url=require('url');
var qs=要求('qs');
var str='右侧™ 实现这一点的方法是使用some解析HTML,并以这种方式获取URL,然后使用regexp解析URL
如果由于某些原因,您没有无限的时间和精力,那么其中一个建议的纯reg exp解决方案将起作用。正确答案™ 实现这一点的方法是使用some解析HTML,并以这种方式获取URL,然后使用regexp解析URL
如果由于某些原因,您没有无限的时间和精力,建议的纯reg exp解决方案之一将有效。2019年更新…
这是基于blueiur的答案构建的,并详细介绍了解决方案JSDOM
需要先安装,然后才能使用:
npm install jsdom
现在,根据,您可以像这样实例化JSDOM
:
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const src1 = document.getElementsByTagName('iframe')[0].src;
const params = (new URL(src1)).searchParams;
const scURL = params.get('src');
const src2 = (new URL(src2)).pathname;
您已经有了一些要解析的html,我将使用您的示例并将其定义为模板文本:
const data = `<iframe width="100%" height="166" scrolling="no" frameborder="no"
src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11111111&auto_play=false
&show_artwork=true&color=c3000d&show_comments=false&liking=false
&download=false&show_user=false&show_playcount=false"></iframe>`;
这里发生了什么事?您正在使用提供的HTML创建一个新的JSDOM对象,并获取窗口
属性的文档
属性。从现在开始,您可以像在浏览器中一样使用document.getElementsByTagName()
和其他类似的函数
要继续您的特定示例,您需要提取文档中唯一iframe
的src
属性。有多种方法可以做到这一点。一个示例是使用getElementsByTagName
拉取第一个iframe
,如下所示:
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const src1 = document.getElementsByTagName('iframe')[0].src;
const params = (new URL(src1)).searchParams;
const scURL = params.get('src');
const src2 = (new URL(src2)).pathname;
现在我们有了src
属性,我们可以将其拆分并处理url
查询值。这就是我们将使用NodeJS附带的URL
类的地方。根据,我们可以通过创建URL对象并访问searchParams
属性来获取搜索参数,如下所示:
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const src1 = document.getElementsByTagName('iframe')[0].src;
const params = (new URL(src1)).searchParams;
const scURL = params.get('src');
const src2 = (new URL(src2)).pathname;
现在,您已经将查询字符串设置为URLSearchParams
对象,您可以访问如下单个术语:
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const src1 = document.getElementsByTagName('iframe')[0].src;
const params = (new URL(src1)).searchParams;
const scURL = params.get('src');
const src2 = (new URL(src2)).pathname;
如果您现在查看scURL
的内容,您会发现它是作为查询传递的嵌入式url,因此我们可以使用另一个url
对象解析它,并提取pathname
属性,如下所示:
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const src1 = document.getElementsByTagName('iframe')[0].src;
const params = (new URL(src1)).searchParams;
const scURL = params.get('src');
const src2 = (new URL(src2)).pathname;
我们现在就要接近了,可以使用JavaScript的标准字符串函数将路径拆分为您想要的get值:
const val = src2.split('/')[2];
并打印结果:
console.log(val);
。。。这将产生以下输出:
11111111
总而言之,以下是完整的代码:
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const data = `<iframe width="100%" height="166" scrolling="no" frameborder="no"
src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11111111&auto_play=false
&show_artwork=true&color=c3000d&show_comments=false&liking=false
&download=false&show_user=false&show_playcount=false"></iframe>`;
const { document } = (new JSDOM(data)).window;
const src1 = document.getElementsByTagName('iframe')[0].src;
const params = (new URL(src1)).searchParams;
const scURL = params.get('src');
const src2 = (new URL(src2)).pathname;
const val = src2.split('/')[2];
console.log(val);
constjsdom=require('jsdom');
const{JSDOM}=JSDOM;
常量数据=``;
const{document}=(新JSDOM(数据)).window;
const src1=document.getElementsByTagName('iframe')[0].src;
常量参数=(新URL(src1)).searchParams;
const scURL=params.get('src');
const src2=(新URL(src2)).pathname;
const val=src2.split('/')[2];
控制台日志(val);
您可以根据需要合并该值并消除中间值。2019年更新…
这是基于blueiur的答案构建的,并详细介绍了解决方案JSDOM
需要先安装,然后才能使用:
npm install jsdom
现在,根据,您可以像这样实例化JSDOM
:
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const src1 = document.getElementsByTagName('iframe')[0].src;
const params = (new URL(src1)).searchParams;
const scURL = params.get('src');
const src2 = (new URL(src2)).pathname;
您已经有了一些要解析的html,我将使用您的示例并将其定义为模板文本:
const data = `<iframe width="100%" height="166" scrolling="no" frameborder="no"
src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11111111&auto_play=false
&show_artwork=true&color=c3000d&show_comments=false&liking=false
&download=false&show_user=false&show_playcount=false"></iframe>`;
这里发生了什么事?您正在使用提供的HTML创建一个新的JSDOM对象,并获取窗口
属性的文档
属性。从现在开始,您可以像在浏览器中一样使用document.getElementsByTagName()
和其他类似的函数
要继续您的特定示例,您需要提取文档中唯一iframe
的src
属性。有多种方法可以做到这一点。一个示例是使用getElementsByTagName
拉取第一个iframe
,如下所示:
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const src1 = document.getElementsByTagName('iframe')[0].src;
const params = (new URL(src1)).searchParams;
const scURL = params.get('src');
const src2 = (new URL(src2)).pathname;
现在我们有了src
属性,我们可以将其拆分并处理url
查询值。这就是我们将使用NodeJS附带的URL
类的地方。根据,我们可以通过创建URL对象并访问searchParams
属性来获取搜索参数,如下所示:
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const src1 = document.getElementsByTagName('iframe')[0].src;
const params = (new URL(src1)).searchParams;
const scURL = params.get('src');
const src2 = (new URL(src2)).pathname;
现在,您已经将查询字符串设置为URLSearchParams
对象,您可以