2017-01-16 42 views
1

我試圖用'x'和'x²'替換數學字符串中的每個'1x'和'1x²':regexp用'x'和'x²'替換'1x'和'1x²'(javascript)

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

問題是我的正則表達式還匹配數字'11x'或'21x',這顯然不是我想要的。所以我的代碼當前輸出x² + (x − 1x)(x² + x²)而不是x² + (x − 11x)(x² + x²)

我知道爲什麼我會得到這種行爲,但我不知道如何解決它。我如何才能讓我的正則表達式匹配每個1x和1x²?當且僅當它們沒有像「11x」或「221x2」之類的其他數字?

+2

使用單詞邊界? 'str.replace(/ \ b1x \ b/g,'x');' –

回答

6

使用word boundary與正則表達式來避免匹配1x11x內。

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');