JavaScript-Regex-Muster verketten mit Variable


91

So erstellen Sie ein Regex-Muster, das mit einer Variablen verknüpft ist:

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

Vielen Dank

Antworten:


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

\bin einem String-Literal ist ein Rücktaste. Wenn Sie einen regulären Ausdruck in ein Zeichenfolgenliteral einfügen, benötigen Sie eine weitere Escape-Runde:

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

(Das brauchen Sie //in diesem Zusammenhang auch nicht.)


16
Es gibt viele Stellen, an denen die Konstruktorfunktion eines eingebauten Typs sowohl mit als auch ohne verwendet werden kann new. Aus Gründen der Konsistenz mit anderen Objekten, bei denen dies möglicherweise nicht zutrifft, und der Klarheit im Allgemeinen würde ich jedoch immer verwenden new.
Bobince

1
Eine andere Möglichkeit besteht darin, aus Gründen der Klarheit einfache Anführungszeichen zu verwenden, damit Sie den Schrägstrichen nicht entkommen müssen:new RegExp('\b'+test+'\b');
IQAndreas

5
Sie müssen immer noch den Backslashes entkommen. Einfache Anführungszeichen haben keine anderen Escape-Regeln als doppelte Anführungszeichen in JavaScript (im Gegensatz zu beispielsweise PHP).
Bobince

Diese Antwort löst auch die gleiche Frage, wenn versucht wird, die Rahmenoperatoren für eine Variable mit den JS-Regexing-Funktionen .match () und .replace () zu verwenden.
HoldOffHunger

Genau das, wonach ich gesucht habe. Der Teil über When putting a regex in a string literal you need one more round of escaping; Gibt es Hintergrundinformationen dazu (die Gründe dafür)?
Bas Peeters

9

Sie können verwenden

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

aber ich schlage vor zu verwenden

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )

9

Mit ES2015 (auch bekannt als ES6) können Sie beim Erstellen von RegExp Vorlagenliterale verwenden :

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
Tippfehler: Regexp muss RegExp
NFpeter
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.