간단한 jQuery 연산을 사용하여 모든 앵커 태그와 해당 텍스트를 동적으로 일치시키고 페이지에 저장하려고했습니다. 그러나 이상한 행동을 발견했습니다. match() 또는 exec()를 사용할 때 바늘을 별도의 RegExp 객체 또는 패턴 변수로 지정하면 쿼리가 건초 더미에있는 수십 개의 인스턴스 중 하나와 일치합니다. 이Javascript Match 및 RegExp 문제 - 이상한 동작
match(/needle/gi)
같은 패턴을 지정하는 경우
는 그리고 그것은 바늘의 모든 인스턴스와 일치합니다.
여기 내 코드입니다.
Firebug를 실행하고이 코드를이 페이지에서 바로 시도 할 수도 있습니다. 나를 위해
var a = {'text':'','parent':[]};
$("a").each(function(i,n) {
var module = $.trim($(n).text());
a.text += module.toLowerCase() + ',' + i + ',';
a.parent.push($(n).parent().parent());
});
var stringLowerCase = 'b';
var regex = new RegExp(stringLowerCase, "gi");
//console.log(a.text);
console.log("regex 1: ", regex.exec(a.text));
var regex2 = "/" + stringLowerCase + "/";
console.log("regex 2: ", a.text.match(regex2));
console.log("regex 3: ", a.text.match(/b/gi));
는 반환 :
이regex 1: ["b"]
regex 2: null
regex 3: ["b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"]
사람이 문제의 루트를 설명 할 수 있습니까?
EDIT : regex1의 경우 전역 및 대소 문자를 구분하지 않고 일치시키기 위해 플래그 "gi"를 추가했는지 여부는 언급하지 않았습니다. 여전히 하나의 일치 항목 만 반환합니다.
EDIT2 : 내 자신의 문제가 해결되었습니다. 나는 여전히 하나의 정규 표현식이 오직 하나의 인스턴스와 매치되는 이유를 모르지만 match()와 regex1을 사용하여 모든 인스턴스를 매치시킬 수 있었다.
그래서이 모든 것이 동적으로 일치합니다!
var regex = new RegExp(stringLowerCase, "gi");
console.log("regex 2: ", a.text.match(regex));
a.text의 내용은 무엇입니까? –
은 두 개의 요소가있는 객체입니다. 코드 상단에 정의했습니다. 그 컨텍스트는 아마도 문서 객체 일 것이다. – picardo