Frage

Ein Kollege fragte mich nach einem regelmäßigen Ausdrucksproblem, und ich kann nicht für ihn zu finden und zu antworten.

Wir verwenden Grenzen, um bestimmte Textlängen in einem Texteditor hervorzuheben, aber hier ist ein Beispielcode, der das Problem anzeigt:

<script type="text/javascript">
var str = "Alpha , Beta, Gamma Delta Epsilon, AAlphaa, Beta Alpha<br/>";
var rx = new RegExp('\bAlpha\b','gim');

document.write(str.replace(/\b(Alpha)\b/gim, '-- $1 --'));
document.write(str.replace(rx, '== $1 =='));
</script>

Das Problem ist, dass die erste buchstäbliche Str. -Replace funktioniert, die Regexp -Option jedoch nicht.

Ich habe das gleiche Verhalten in IE und FF, weiß jemand warum?

War es hilfreich?

Lösung

Ich vermute, dass es nicht funktioniert, weil Sie den Backslashes in Ihrer Saite entkommen müssen, die Sie an Regexp übergeben. Du hast das:

var rx = new RegExp('\bAlpha\b','gim');

Du brauchst das:

var rx = new RegExp('\\bAlpha\\b','gim');

Die Zeichenfolge, die Sie an Regexp übergeben haben \b ist die Escape -Sequenz, um einen Rückenraum in eine Zeichenfolge einzuführen. Sie müssen jedem Backslash mit einem anderen Backslash entkommen.

Andere Tipps

Regexp muss den Fluchtcharakter entkommen lassen:

new RegExp('\\bAlpha\\b')

Dies ist ein String -Problem. \b In einem Streichliteral ist ein Rückenraum!

RegExp('\\bAlpha\\b','gim'); wäre die richtige Form

Es gibt zwei Möglichkeiten, Ihre regulären Ausdrücke in JavaScript zu schreiben

  1. wörtlich
  2. Regexp -Objekt

Auf wörtliche Weise verwenden Sie, wie Sie in Ihrem Lehrbuch, z. B. Balabala / aber im Regexp -Objekt, gelernt haben. Der reguläre Ausdruck wird als Zeichenfolge geschrieben.

Probieren Sie die folgenden Codes aus, Sie wissen, was String in JavaScript verhält.

alert("O\K");
alert("O\\K");

Es gibt eine andere Gelegenheit, wenn Regexp in einem Textbereich oder Eingabefeld geschrieben wurde. Zum Beispiel,

http://www.pagecolumn.com/tool/regtest.htm

In diesem Fall muss in Regexp nicht entkommen werden.

In der Tat müssen Sie alles in der Saite zurücklösen, die an die übergeben wurden Regexp Konstrukteur :

var re = /my_([\w_]+-\d-)regexp/

ist äquivalent zu :

var re = new RegExp("my_\(\[\\\w_\]+-\\\d-\)regexp")

Und beide passen dem folgenden dummen Beispiel an:

"my_very_obvious-4-regexp".match(re)
["my_very_obvious-4-regexp", "very_obvious-4-"]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top