2017-01-16 4 views
1

Ich versuche jedes '1x' und '1x²' in einer mathematischen Zeichenfolge mit 'x' und 'x²' zu ersetzen:regexp '1x' und '1x²' durch 'x' und 'x²' ersetzen (JavaScript)

var str = '1x² + (1x − 11x)(1x² + 1x²)'; //string to be parsed 
var reg = str.replace(/1x/g, 'x'); 
console.log(reg); 

Problem ist mein regexp paßt Zahlen auch wie ‚11x‘ oder ‚21x‘, die offensichtlich nicht das, was ich will. Also mein Code gibt derzeit x² + (x − 1x)(x² + x²) statt x² + (x − 11x)(x² + x²) aus.

Ich weiß, warum ich dieses Verhalten bekomme, aber ich weiß nicht, wie ich es beheben soll. Wie kann ich meine Regexp genau dann an jedes 1x und 1x² anpassen, wenn ihnen keine andere Zahl wie "11x" oder "221x²" vorangestellt ist?

+2

Verwenden Sie eine Wortgrenze? 'str.replace (/ \ b1x \ b/g, 'x');' –

Antwort

6

Verwenden Sie word boundary mit Regex, um die Übereinstimmung 1x innerhalb 11x zu vermeiden.

var str = '1x² + (1x − 11x)(1x² + 1x²)'; //string to be parsed 
 
var reg = str.replace(/\b1x/g, 'x'); 
 
console.log(reg);

+1

Ihre Lösung macht genau das, was ich will und hat mir ein Werkzeug beigebracht, mit dem ich in Zukunft viel anfangen werde! Vielen Dank –

0

Dies scheint zu funktionieren:

var str = '1x² + (1x − 11x)(1x² + 1x²)'; //string to be parsed 
var reg = str.replace(/(^|\D)1x(\D|$)/g,'$1x$2'); 
Verwandte Themen