JavaScript 정규식 패턴은 변수와 연결


93

다음과 같이 변수와 연결되는 정규식 패턴을 만드는 방법 :

var test ="52";
var re = new RegExp("/\b"+test+"\b/"); 
alert('51,52,53'.match(re));

감사

답변:


149
var re = new RegExp("/\b"+test+"\b/"); 

\b문자열 리터럴에서 백 스페이스 문자입니다. 정규식을 문자열 리터럴에 넣을 때 한 번 더 이스케이프가 필요합니다.

var re = new RegExp("\\b"+test+"\\b"); 

( //이 컨텍스트 에서는 필요하지 않습니다 .)


16
내장 유형의 생성자 함수가 .NET과 함께 또는없이 모두 사용될 수있는 곳이 많이 있습니다 new. 그러나 이것이 사실이 아닐 수있는 다른 객체와의 일관성과 일반적으로 명확성을 위해 항상 new.
bobince

1
또 다른 방법은 명확성을 위해 작은 따옴표를 사용하는 것이므로 백 슬래시를 피할 필요가 없습니다.new RegExp('\b'+test+'\b');
IQAndreas

5
여전히 백 슬래시를 이스케이프해야합니다. 작은 따옴표에는 JavaScript에서 큰 따옴표에 대한 이스케이프 규칙이 다릅니다 (예 : PHP와 달리).
bobince

이 답변은 .match () 및 .replace () JS 정규식 함수를 사용하여 변수에 테두리 연산자를 사용하려고 할 때 동일한 질문을 해결합니다.
HoldOffHunger

내가 찾던 바로 그것. 에 대한 부분 When putting a regex in a string literal you need one more round of escaping; (그 이유)에 대한 배경 정보가 있습니까?
Bas Peeters

10

ES2015 (일명 ES6)를 사용 하면 RegExp를 생성 할 때 템플릿 리터럴을 사용할 수 있습니다 .

let test = '53'
const regexp = new RegExp(`\\b${test}\\b`, 'gi') // showing how to pass optional flags
console.log('51, 52, 53, 54'.match(regexp))


3
오타 : Regexp는 RegExp 여야합니다
NFpeter 19

9

당신이 사용할 수있는

/(^|,)52(,|$)/.test('51,52,53')

하지만 나는 사용하는 것이 좋습니다

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.