IT박스

RegExp 개체에 정규식 수정 자 옵션 전달

itboxs 2020. 12. 29. 06:49
반응형

RegExp 개체에 정규식 수정 자 옵션 전달


다음과 비슷한 것을 만들려고합니다.

var regexp_loc = /e/i;

정규 표현식이 문자열에 종속되기를 원하므로 새 RegExp를 사용하려고 시도했지만 원하는 것을 얻을 수 없었습니다.

기본적으로 e위의 정규 표현식에서 문자열 변수가 되길 원 하지만 구문으로 실패합니다.

나는 다음과 같이 시도했다.

var keyword = "something";

var test_regexp = new RegExp("/" + keyword + "/i");

기본적으로 더 큰 문자열에서 하위 문자열을 검색 한 다음 해당 문자열을 대소 문자를 구분하지 않는 다른 문자열로 바꾸고 싶습니다.

안부, 알렉산더


두 번째 매개 변수 를 전달해야합니다 .

var r = new RegExp(keyword, "i");

또한 정규식 주입 공격을 방지하기 위해 문자열의 특수 문자를 이스케이프해야합니다.


또한 문자열 내의 이스케이프 문자를주의해야합니다.

예를 들어 단일 숫자 \ d {1}를 감지하고 싶었는데 이렇게했다면 ...

var pattern = "\d{1}";
var re = new RegExp(pattern);

re.exec("1"); // fail! :(

이니셜 \가 이스케이프 문자이기 때문에 실패합니다. "이스케이프를 이스케이프"해야합니다.

var pattern = "\\d{1}" // <-- spot the extra '\'
var re = new RegExp(pattern);

re.exec("1"); // success! :D

RegExp 생성자를 사용할 때는 regexp 리터럴을 사용할 때처럼 슬래시가 필요하지 않습니다. 그래서:

new RegExp(keyword, "i");

두 번째 매개 변수의 플래그를 전달합니다. 자세한 정보는 여기참조 하십시오 .


여기에 예를 공유하고 싶습니다.

: 나는 같은 문자열을 대체 할 hi[var1][var2]hi[newVar][var2]. var1페이지 동적으로 생성된다.

그래서 나는 사용해야했습니다.

var regex = new RegExp("\\\\["+var1+"\\\\]",'ig');
mystring.replace(regex,'[newVar]');

이것은 나에게 꽤 잘 작동합니다. 누군가 나처럼 이것을 필요로한다면. 내가 []를 사용해야하는 이유는 var1 자체가 매우 쉬운 패턴 일 수 있으므로 []를 추가하면 훨씬 정확할 것입니다.


var keyword = "뭔가";

var test_regexp = new RegExp(something,"i");

RegExp 를 변환해야 합니다. 실제로 간단한 함수를 만들어서 수행 할 수 있습니다.

function toReg(str) {
  if(!str || typeof str !== "string") {
    return;
  }
  return new RegExp(str, "i");
}

다음과 같이 부릅니다.

toReg("something")

참조 URL : https://stackoverflow.com/questions/5172183/passing-regex-modifier-options-to-regexp-object

반응형