[javascript] Javascript Regex : 정규식 안에 변수를 넣는 방법?

예를 들어 :

function(input){
    var testVar = input;
    string = ...
    string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}

그러나 이것은 물론 작동하지 않습니다 🙂 이것을 할 수있는 방법이 있습니까?



답변

const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");

최신 정보

의견의 일부 당, 당신이 할 수 있음에 유의해야 탈출 변수 (예 : 변수가 사용자의 입력에서 오는) 악의적 인 콘텐츠에 대한 가능성이있는 경우

ES6 업데이트

2019 년에는 일반적으로 템플릿 문자열을 사용하여 작성되며 위 코드가 업데이트되었습니다. 원래 답변은 다음과 같습니다.

var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");


답변

RegExp 객체를 사용할 수 있습니다.

var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);

그런 다음 regexstring원하는 방식으로 구성 할 수 있습니다 .

자세한 내용은 여기를 참조 하십시오 .


답변

JavaScript의 변수에서 정규식을 작성하려면 RegExp문자열 매개 변수와 함께 생성자 를 사용해야합니다 .

function reg(input) {
    var flags;
    //could be any combination of 'g', 'i', and 'm'
    flags = 'g';
    return new RegExp('ReGeX' + input + 'ReGeX', flags);
}

물론 이것은 매우 순진한 예입니다. input정규 표현식에 대해 올바르게 이스케이프되었다고 가정합니다 . 사용자 입력을 다루거나 특수 문자를보다 편리하게 일치 시키려면 특수 문자를 이스케이프 처리 해야합니다 .

function regexEscape(str) {
    return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
}

function reg(input) {
    var flags;
    //could be any combination of 'g', 'i', and 'm'
    flags = 'g';
    input = regexEscape(input);
    return new RegExp('ReGeX' + input + 'ReGeX', flags);
}


답변

es6 템플릿 리터럴 을 사용하는 경우 옵션입니다 …

string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")


답변

항상 정규 표현식을 문자열로 제공 할 수 있습니다 (예 🙂 "ReGeX" + testVar + "ReGeX". 문자열 내에서 일부 문자 (예 : 큰 따옴표)를 이스케이프해야 할 수도 있지만 대부분의 경우 동일합니다.

RegExp생성자를 사용 하여 플래그를 전달할 수도 있습니다 ( docs 참조 ).


답변

다음 두 가지 방법 중 하나로 JS에서 정규 표현식을 작성할 수 있습니다.

  1. 정규 표현식 리터럴 사용- /ab{2}/g
  2. 정규식 생성자 사용- new RegExp("ab{2}", "g").

정규식 리터럴은 상수이며 변수와 함께 사용할 수 없습니다. 이것은 생성자를 사용하여 달성 할 수 있습니다. RegEx 생성자의 구조는 다음과 같습니다.

new RegExp(regularExpressionString, modifiersString)

regularExpressionString의 일부로 변수를 포함 할 수 있습니다. 예를 들어

var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g") 

이것은 패턴의 모양과 일치합니다 cdcdcd.


답변

다음은 특정 문자로 래핑 된 값을 반환하는 매우 쓸모없는 함수입니다. 🙂

jsfiddle : https://jsfiddle.net/squadjot/43agwo6x/

function getValsWrappedIn(str,c1,c2){
    var rg = new RegExp("(?<=\\"+c1+")(.*?)(?=\\"+c2+")","g");
    return str.match(rg);
    }

var exampleStr = "Something (5) or some time (19) or maybe a (thingy)";
var results =  getValsWrappedIn(exampleStr,"(",")")

// Will return array ["5","19","thingy"]
console.log(results)