예를 들어 :
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
그러나 이것은 물론 작동하지 않습니다 :) 이것을 할 수있는 방법이 있습니까?
예를 들어 :
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
그러나 이것은 물론 작동하지 않습니다 :) 이것을 할 수있는 방법이 있습니까?
답변:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
의견의 일부 당, 당신이 할 수 있음에 유의해야 탈출 변수 (예 : 변수가 사용자의 입력에서 오는) 악의적 인 콘텐츠에 대한 가능성이있는 경우
2019 년에는 일반적으로 템플릿 문자열을 사용하여 작성되며 위 코드가 업데이트되었습니다. 원래 답변은 다음과 같습니다.
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
표현
/\w+\//i
이된다new RegExp("\\w+/", "i")
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);
}
ReGeX
텍스트를 삭제하는 것입니다. return new RegExp(input, flags);
es6 템플릿 리터럴 을 사용하는 경우 옵션입니다 ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); 내보내기 const validatePassword = 값 => value.match (newRegExp); ```
다음 두 가지 방법 중 하나로 JS에서 정규 표현식을 작성할 수 있습니다.
/ab{2}/g
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)
허용 된 답변이 저에게 효과가 없으며 MDN 예를 따르지 않습니다.
위 링크의 '설명'섹션 참조
나는 그것이 나를 위해 일하고있는 다음과 함께 갈 것이다.
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
문자열 변수를 먼저 준비한 다음 RegEx로 변환하기 만하면됩니다.
예를 들면 다음과 같습니다.
RegEx에 변수 를 추가 minLength
하고 싶습니다 MaxLength
.
function getRegEx() {
const minLength = "5"; // for exapmle: min is 5
const maxLength = "12"; // for exapmle: man is 12
var regEx = "^.{" + minLength + ","+ maxLength +"}$"; // first we make a String variable of our RegEx
regEx = new RegExp(regEx, "g"); // now we convert it to RegEx
return regEx; // In the end, we return the RegEx
}
MaxLength
또는의 값을 변경하면 MinLength
모든 RegEx에서 변경됩니다.
도움이 되길 바랍니다. 내 영어에 대해 죄송합니다.