2010-01-27 20 views
7

Ich versuche, ein Vorkommen einer Zeichenfolge in Zeichenfolge zu erkennen. Aber der folgende Code gibt immer "null" zurück. Offensichtlich ging etwas schief, aber da ich ein Neuling bin, kann ich es nicht erkennen. Ich erwarte, dass der Code "true" anstelle von "null" zurückgibtMatch dynamische Zeichenfolge mit Regex

var searchStr = 'width'; 
var strRegExPattern = '/'+searchStr+'\b/'; 
"32:width: 900px;".match(new RegExp(strRegExPattern,'g')); 

Antwort

17

Bitte nicht setzen '/', wenn Sie Zeichenfolge in RegExp Option passieren

wäre schön Nach

var strRegExPattern = '\\b'+searchStr+'\\b'; 
"32:width: 900px;".match(new RegExp(strRegExPattern,'g')); 
+0

immer noch das gleiche Ergebnis Mark. http://cld.ly/b616ma –

+0

könntest du mit searchStr nur ohne '\\ b' part versuchen? Deine Saite sollte ohne das funktionieren. – YOU

+0

@Fares, du brauchst ''\\ b'' mit 2' \ 's, nicht' '\ b''. – kennytm

0

Beachten Sie, dass '\\ b' ist ein einzelner Schrägstrich in einer Zeichenfolge, gefolgt von dem Buchstaben 'b', '\ b' ist der Escape-Code \b, der nicht existiert, und bricht auf 'b'.

Beachten Sie auch das Maskieren von Metazeichen in der Zeichenfolge, wenn Sie beabsichtigen, dass sie nur ihren Literalwerten entsprechen.

var string = 'width'; 
var quotemeta_string = string.replace(/[^$\[\]+*?.(){}\\|]/g, '\\$1'); // escape meta chars 
var pattern = quotemeta_string + '\\b'; 
var re = new RegExp(pattern); 
var bool_match = re.test(input); // just test whether matches 
var list_matches = input.match(re); // get captured results 
3

Sie Mischen der beiden Möglichkeiten zur Schaffung von regulären Ausdrücken in JavaScript auf. Wenn Sie einen regulären Ausdruck wörtlichen verwenden, / ist der regex Begrenzer, der g Modifikator sofort den Endbegrenzer folgt und \b ist die Escape-Sequenz für eine Wortgrenze:

var regex = /width\b/g; 

Wenn Sie es in Form einer Zeichenfolge erstellen wörtliche für den RegExp Konstruktor, lassen Sie die regex Trennzeichen aus, Sie Modifikatoren in Form eines zweiten String Argument übergeben, und Sie haben die Schrägstriche in regex Escape-Sequenzen zu verdoppeln:

var regex = new RegExp('width\\b', 'g'); 

die Art und Weise Sie tun Es wird die \b in eine Rücktaste konvertiert Zeichen, bevor es den Regex-Compiler erreicht; Sie müssen dem umgekehrten Schrägstrich entkommen, um ihn an die String-Literal-Escape-Sequence-Verarbeitung von JavaScript zu übergeben. Oder verwenden Sie ein Regex-Literal.