Jquery正则表达式搜索子字符串或通配符

时间:2018-03-12 13:09:00

标签: javascript jquery regex search

我有这个正则表达式搜索: 我正在寻找阵列中的产品价格。 搜索与产品编号匹配(在本例中为“04.1177”)

取决于产品是“产品系列”还是单个产品 Productnumbers有7到12个字符。 “04.1177”是单个产品,而“04.1177.0000”定义了一系列产品。 我想找到前7个字符的所有出现,忽略最后5个字符。

sentInfo = "04.1177"

function getPrices(sentInfo) { 
var searchFor = sentInfo.toString()

 // Make sure we use . instead of , in string
 var search_term = (sentInfo).replace(/\,/g,'.');                               

var search = new RegExp(search_term, "i");
    if (sdsInfo) {      
        sdsFilter = $.grep(sdsInfo.priser, function (element, index) {
            var sted = search.test("^"+element.FIELD1+"\//")
            return sted;
        }); 
    }
$.each( sdsFilter, function ( index, value ) {
    $('.'+kat).html((value.FIELD2).toFixed(2));
    $('.'+kat).data('price',value.FIELD2);
});
}

上述脚本本身就有效。

数组看起来像这样:

{"FIELD1":"01.1407","FIELD2":259, "FIELD3":"name"},{"FIELD1":"04.1177.0000","FIELD2":349, "FIELD3":"name"},{"FIELD1":"04.1177.0100","FIELD2":349, "FIELD3":"name"}

使用上面的脚本,如果value.FIELD1匹配整个字符串,我得到匹配。但如果字符串更长

,它会省略结果(返回null或false)

搜索:04.1177在04.1177 = true 搜索:04.1177在04.1177.0000 = false

我需要确保以上两点都是真的。 有什么想法吗?

很抱歉,如果这个问题以某种方式重复,但我无法在任何地方找到解决方案......

1 个答案:

答案 0 :(得分:1)

如果您确定要检查var的前7个字符并忽略其余字符,只需针对var.substring(0,7)而不是完整的var运行正则表达式。 (这将返回七个字符,从索引0开始 - 因此是字符串的前七个字符。)

如果你知道你只是在寻找这7个字符的完全匹配,那就测试相等而不是使用正则表达式。

您的代码中有一些未定义的变量(看起来您可能已经翻译了一些变量名而不是其他变量名) - katsdsInfo(是数组吗?),{{1 - 所以我不是100%肯定以下代码符合你的意图,但它应该足以证明这个想法:

sdsInfo.priser
var arr = [{
  "FIELD1": "01.1407",
  "FIELD2": 259,
  "FIELD3": "name"
}, {
  "FIELD1": "04.1177.0000",
  "FIELD2": 349,
  "FIELD3": "name"
}, {
  "FIELD1": "04.1177.0100",
  "FIELD2": 349,
  "FIELD3": "name"
}]

function getPrices(sentInfo) {
  // Make sure we use . instead of , in string
  var search_term = sentInfo.toString().replace(/\,/g, '.');

  arr.forEach(function(value) {
    // compare the first 7 chars of FIELD1 to search_term, which is already 7 chars:
    if (value.FIELD1.substring(0,7) === search_term) {
      console.log("matched: ", value)
      //$('.' + kat).data('price', value.FIELD2);
    }
  });

}

getPrices("04.1177")