だから例えば:
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");
/\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 => value.match(newRegExp); `` `
JSで正規表現を作成するには、次の2つの方法があります。
/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に変換するだけです。
例えば:
あなたは、追加したい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で変更されます。
お役に立てれば幸いです。英語もごめんなさい。