2017-02-13 46 views
1

我有一個這樣的字符串:如何使用正則表達式引用的所有變量名在JavaScript

"xyz([x,3],x,[x,y],{y:1})" needs to be "xyz(['x',3],'x',['x','y'],{'y':1})" 

注意:變量可以在這種情況下,任何字母從az

我需要用它們的引用版本替換像x,y和z這樣的變量

在我的測試中,逗號被正則表達式捕獲,問題是如果我捕獲x,則y不會被捕獲,因爲相交的逗號。

var str = "xyz([x,3],x,[x,y],{y:1})" 
str.replace(/(\W)([a-z])(\W)/g,"$1'$2'$3") 
//output: mul(['x',3],'x',['x',y],{'y':1}) 

新增例如:JSFiddle

是否有指定沒有捕捉他們周圍的元素的方法嗎?

回答

0

這將替換逗號或冒號前的變量。

var txt="xyz([x,3],x,[x,y],{y:1})"; 

    txt.replace(/[a-z]+[,:\])]/g, function f(x){ 
     return "'"+x.replace(/[,:\]\)]/g,"")+"'"+x[x.length-1]; 
    }) 
+0

好吧,但所有其他元素喜歡)或],事情是,它需要在參數中的任何變量名稱我只是添加了一些變化 – shuji

+0

,但我想你是對的,也許最好的解決方案是添加案例,因爲它們出現 – shuji

+0

對於像abcd,xyz的任何變量,請參閱我的編輯。 – vusan

-1

您正在添加正在創建問題的捕獲組。刪除它們,並使用:

\W([a-z])\W 

Here是一個工作版本。

更新

工作與你的JS,

var original = "xyz([x,3],x,[x,y],{y:1})" 
var replaced = original.replace(/([a-z])/g, "'$1'") 

,我已經更新了小提琴。

+0

好,我添加了一個例子來更好地說明問題https://jsfiddle.net/wy1wrzhz/ – shuji

+0

你可能是不同的,你可以找到從az的字母中的函數名稱或其他地方HTTPS權:/ /jsfiddle.net/wy1wrzhz/2/ – shuji

相關問題