2017-01-16 2 views
1

Я пытаюсь заменить все «1x» и «1x²» в математической строке «x» и «x 2»:regexp заменить '1x' и '1x²' на 'x' и 'x²' (javascript)

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

Проблема мое регулярное_выражение также соответствует номерам, как «11й» или «21й», что, очевидно, не то, что я хочу. Таким образом, мой код в настоящее время выводит x² + (x − 1x)(x² + x²) вместо x² + (x − 11x)(x² + x²).

Я знаю, почему у меня такое поведение, но я не знаю, как это исправить. Как я могу заставить мое регулярное выражение соответствовать каждому 1x и 1x² тогда и только тогда, когда им не предшествует другое число, например «11x» или 221x²?

+2

Использование границы слова? 'str.replace (/ \ b1x \ b/g, 'x');' –

ответ

6

Используйте word boundary с регулярным выражением, чтобы избежать соответствия 1x в пределах 11x.

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

+1

Ваше решение делает именно то, что я хочу, и научил меня инструменту, который я буду использовать в будущем! спасибо –

0

Это, кажется, работает:

var str = '1x² + (1x − 11x)(1x² + 1x²)'; //string to be parsed 
var reg = str.replace(/(^|\D)1x(\D|$)/g,'$1x$2'); 
Смежные вопросы