温暖的凉面 · Scrapy爬虫框架(实战篇)【Scrapy ...· 1 年前 · |
霸气的麦片 · 如何:确定被单击的 TreeView 节点 ...· 1 年前 · |
八块腹肌的绿茶 · 记录 Parameter with ...· 1 年前 · |
很酷的蚂蚁 · 微光图像增强 - 知乎· 1 年前 · |
追风的打火机 · Arm64X PE 文件 | ...· 1 年前 · |
所以我有一个HTML链接数组;
[
"<a href=\"...\" target=\"_blank\">foo</a>",
"<a href=\"...\" target=\"_blank\">apple</a>",
"<a href=\"...\" target=\"_blank\">cucumber</a>"
]
我想根据它面向用户的输出(即
a
标签的内容)对其进行排序;
[
"<a href=\"...\" target=\"_blank\">apple</a>",
"<a href=\"...\" target=\"_blank\">cucumber</a>",
"<a href=\"...\" target=\"_blank\">foo</a>"
]
我想我必须去掉HTML标记,然后再去掉
.sort()
,但我不知道如何将其与原始数组协调。我该怎么做?
您可以使用regex和比较函数轻松地做到这一点。
var arr = [
"<a href=\"...\" target=\"_blank\">foo</a>",
"<a href=\"...\" target=\"_blank\">apple</a>",
"<a href=\"...\" target=\"_blank\">cucumber</a>"
function compFunc(a,b){
return a.match(/>(.*)</)[1] > b.match(/>(.*)</)[1];
console.log(arr.sort(compFunc))
regex将匹配关闭的
>
与以下打开的
<
之间的任何内容(需要确保它们之间的内容不包含这些字符),而
(.*)
周围的括号意味着它是一个捕获组,从
.match()
返回的数组中将捕获组的内容(我们希望的字符串)作为第二个元素。
您可以使用 DOMParser 解析HTML并获取标记的内容。
如果不使用regex,只要选择器匹配,标记就可以是任何东西,这通常是regex 并不能真正解析HTML 所需要的。
然后使用
localeCompare
比较字符串,这避免了区分大小写和使用
<
或
>
的特殊字符的问题。
arr.sort(function(a,b) {
var docA = new DOMParser().parseFromString(a, "text/html");
var docB = new DOMParser().parseFromString(b, "text/html");
var txtA = docA.querySelector('a').innerHTML;
var txtB = docB.querySelector('a').innerHTML;
return txtA.localeCompare(txtB);
});
八块腹肌的绿茶 · 记录 Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentExce_微风--轻许--的博客-CSDN博客 1 年前 |
很酷的蚂蚁 · 微光图像增强 - 知乎 1 年前 |