簡體   English   中英

jQuery grep跳過數組中的術語

[英]jQuery grep is skipping terms in array

我正在嘗試使用jQuery grep函數過濾字符串數組,但它正在跳過數組中的元素。 如果我通過代碼調試所有條件都返回true,但是如果我在不調試的情況下運行代碼,則會跳過第二個元素。

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.grep demo</title>
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p></p>
<script>
var arr = [ { value : "A1-99-101"}, { value : "A1-99-102"}, { value : "A1-99-109" } ];
var regex = /(?=.*?\bA1.*\b).*/ig;
var newarr = jQuery.grep(arr, function( n, i ) {
return (regex.test(n.value));
});
var printarr = '';
for (var i = 0; i < newarr.length; ++i) {
  printarr += newarr[i].value + ',';
}
$( "p" ).text( printarr );
</script>
</body>
</html>

由於在正則表達式( .../ig )中修改了g ,因此您遇到了問題。 它強制正則表達式從最后匹配的位置繼續。 這是正在發生的事情:

  • regexp匹配A1-99-101並將位置保存為0
  • 下一次迭代將位置移至1,但與A1-99-102不匹配
  • 然后regexp重置自身,因為它到達了字符串的結尾
  • 最后匹配第三個元素A1-99-109

要解決此問題,只需刪除g修飾符:

var regex = /(?=.*?\bA1.*\b).*/i;

另外這里是鏈接到工作代碼

編輯

您的正則表達式對我來說也看起來太復雜了。 如果您只想過濾以A1開頭的字符串,請使用以下regexp:

var regex = /A1/i;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM