问题:我收到AJAX响应(JSON或带换行符的纯文本)。应该通过RegEx检查响应的每个项目,以找出它是否与用户定义的模式匹配。
例子:
Ajax响应(纯文本)
"Aldor
Aleph
Algae
Algo
Algol
Alma-0
Alphard
Altran"
用户模式:
/^Alg/ig.test(responseItem)
RegExp结果应如下所示:
Aldor // false
Aleph // false
Algae // true
Algo // true
Algol // true
Alma-0 // false
Alphard // false
Altran // false
但是每次我得到不同的结果(有点奇怪)...例如(
/^alg/ig.test("Algo")
=> 错误)我的代码:
HTML
...
<form>
<input id="in" />
</form>
<div id="x">
Aldor
Aleph
Algae
Algo
Algol
Alma-0
Alphard
Altran
</div><button id="checker">check!</button>
...
JavaScript(jQuery 1.6.2)
$(function(){
var $checker = $('#checker');
$checker.click(function(ev){
var inputFieldVal = $.trim($('#in').val());
console.log(inputFieldVal); // Alg
var regExpPattern = '^'+inputFieldVal,
re = new RegExp(regExpPattern, 'igm');
onsole.log(re); // /^Al/gim
// Get text out of div#x
var text = $('#x').text();
// Trim and 'convert' to an array...
text = $.trim(text).split('\n');
console.log(text); // ["Aldor", "Aleph", "Algae", "Algo", "Algol", "Alma-0", "Alphard", "Altran"]
for (var index=0, upper=text.length;index<upper;++index) {
console.log(
re.test(text[index]),
text[index]
);
}
});
})
控制台输出:
/^Alg/ig
=>应该匹配以Alg
开头的每个项目false "Aldor"
false "Aleph"
true "Algae"
false "Algo" //Why ? O.o
true "Algol"
false "Alma-0"
false "Alphard"
false "Altran"
/^Al/ig
=>应该匹配每个项目,因为每个项目都以Al
开头true "Aldor"
false "Aleph" //Why ? O.o
true "Algae"
false "Algo" //Why ? O.o
true "Algol"
false "Alma-0" //Why ? O.o
true "Alphard"
false "Altran" //Why ? O.o
有什么建议?
最佳答案
当您处理具有全局g
标志的模式时,这是exec或test方法显示的常见行为。RegExp
对象将跟踪找到匹配项的lastIndex
,然后在后续匹配项中,它将从该lastIndex
开始而不是从0
开始。
例如:
var re = /^a/g;
console.log(re.test("ab")); // true, lastIndex was 0
console.log(re.test("ab")); // false, lastIndex was 1
从样式中删除
g
标志,因为您只是在寻找单个匹配项(正在分别测试每一行)。