JQuery 搜索并比较数组中的部分单词

JQuery search and compare part of word in array

我是 JQuery 的新手,我遇到了第一个问题! ;) 我想从许多 url.

的数组中搜索特定的 word/number

我尝试了几种方法,但是 只找到完整的 URL 匹配,而从来没有只找到“359”,这是我的值之一我正在寻找...

我猜是因为它不是子字符串(句子中没有 space)? 我能做什么,使用正则表达式搜索?匹配?

/* 01 - Parse links in aLinks array */

  jQuery(document).ready(function parseLink() {
        
    var aLinks = $('a.link.article').map( function() {
        return $(this).attr('href');
    }).get();
   
/*  02 - Loop and search over array */
  
  var refArray = ['359', '../page/article?686&lng=5'];
  
  $.each(aLinks, function(idx, value) {
        if ($.inArray(value, refArray) !== -1) {
            console.log('MATCH : ' + value);

/*
    Only the second index works... because isn't a substring ?
*/

        } else {
            console.log('NOT MATCH: ' + value);
        }
    });
});

谢谢! 最好的祝福, 菲兹

编辑:使用 cheesyMan 的解决方案,我只是添加了 urlStart 和 urlEnd 的连接:


urlStart = '../page/article?';
urlEnd = '&lng='

$.each(aLinks, function(idx, val) {
    let matching = false;
    for (let i = 0; i < compare.length; i++) {
        if (val.includes(urlStart + compare[i] + urlEnd)) {
          console.log(`${val} MATCHED!`);
          matching = true;
        }
    }

        if (!matching) console.log(`${val} DID NOT MATCH...`)
        })

没关系,非常感谢!!

这里我有一个搜索#SUuL1 输入的脚本。来自 #uList1 并将其替换为标记标签。不完全是您正在寻找的东西,但它是您可以 fiddle 使用的东西。实际上,您正在寻找的部分是 RegExp。 // 搜索所有✌️

let searched = document.getElementById("SUuL1").value.trim();
if (searched !== "") {
    let text = document.getElementById("uList1").innerHTML;
    let re = new RegExp(searched+ "(?![^<>]*>)","ig"); // search for all
    let newText = text.replace(re, `<mark>${searched}</mark>`);
    document.getElementById("uList1").innerHTML = newText;
}

在您的 $.each() 循环中,您将 aLinks[] 中的每个 linkrefArray[] 中的值进行比较,使用 strict equality.

因此,第一个数组 (aLinks) 的每个值必须 严格等于 (===) 第二个数组的元素之一(refArray).

我认为您需要在 $.each 中嵌套循环(将每个 link 与每个引用进行比较)并将它们与 includes(). Also substring() 进行比较在这种情况下可能很有用。

我在这段代码中使用了一些假数组,不知道它们是否适合您的数据。

const compare = [
  '389', '423', '../page/article?915&lng=5', '212', '../page/article?686&lng=3'
]

const links = [
  '../page/article?359&lng=5', '../page/article?389&lng=2', '../page/article?459&lng=4', '../page/article?212&lng=1', '../page/article?915&lng=5'
]


$.each(links, function(idx, val) {
  let matching = false;
  for (let i = 0; i < compare.length; i++) {
    if (val.includes(compare[i])) {
      console.log(`${val} MATCHED!`);
      matching = true;
    }
  }

  if (!matching) console.log(`${val} DID NOT MATCH...`)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>