2017-08-11 13 views
1

JavaScriptを使用しており、正規表現について質問があります。私は何を求めているのか正確には分かりませんでした。文字列を連結して正規表現を構築する方法は?

私は非常に長い正規表現を持っています。私は正規表現が何を検証しているかを明確にするために、より小さな文字列の束に分割したいと思います。

私は

const patternOne = /(\w+:{0,1}\w*@)?/; 
const patternTwo = /([a-zA-Z0-9.-]+)/; 

const pattern = new RegExp(`^${patternOne.source}${patternTwo.source}$`, 'i'); 

(この方法は、実際に動作する)、のような何かを行うことによって、より小さなものに長い正規表現を分割することが可能であることを知っているが、私は.sourceを省略するなど、よりシンプルな何かをしたいと思います文字列だけで

しかし、私は、たとえば pattern.test(myString)のために行うとき、私は正規表現が無効であるというエラーを取得を使用して

const patternOne = '(\w+:{0,1}\w*@)?'; 
const patternTwo = '([a-zA-Z0-9.-]+)'; 

const pattern = new RegExp(`/^${patternOne}${patternTwo}$/`, 'i'); 

多分、私のキャラクターの1人をエスケープするのを忘れましたか?または、文字列だけを使用することはできませんか?

+0

あなたは前方を入れていない正規表現を中心にスラッシュRegExp関数で定義されています。 – James

答えて

3

1つのエスケープの代わりに2つのスラッシュを使用する必要があります。

また、最初に/を追加する必要はなく、RegExp関数の最後に追加する必要はありません。

const pattern = new RegExp(`/^${patternOne}${patternTwo}$/`, 'i'); 
          ^^       ^^ -> remove those 

それはあなたのコードに最も近い解である自動的

const patternOne = '(\\w+:{0,1}\\w*@)?'; 
 
const patternTwo = '([a-zA-Z0-9.-]+)'; 
 

 
const pattern = new RegExp("^" + patternOne + patternTwo + "$", 'i'); 
 
console.log(pattern);

0

追加されます。

const patternOne = String.raw`(\w+:{0,1}\w*@)?`; 
const patternTwo = String.raw`([a-zA-Z0-9.-]+)`; 

const pattern = new RegExp(`^${patternOne}${patternTwo}$`, 'i'); 
関連する問題