我有这个正则表达式搜索: 我正在寻找阵列中的产品价格。 搜索与产品编号匹配(在本例中为“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
我需要确保以上两点都是真的。 有什么想法吗?
很抱歉,如果这个问题以某种方式重复,但我无法在任何地方找到解决方案......
答案 0 :(得分:1)
如果您确定要检查var
的前7个字符并忽略其余字符,只需针对var.substring(0,7)
而不是完整的var
运行正则表达式。 (这将返回七个字符,从索引0开始 - 因此是字符串的前七个字符。)
如果你知道你只是在寻找这7个字符的完全匹配,那就测试相等而不是使用正则表达式。
您的代码中有一些未定义的变量(看起来您可能已经翻译了一些变量名而不是其他变量名) - kat
,sdsInfo
(是数组吗?),{{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")