2016-08-24 92 views
2

我想從每個值中刪除「()」。我會怎麼做?JavaScript修剪字符

var arr = ["(one)","(two)","(three)","(four)","(five)"]; 

for(var i = 0; i < arr.length; i++){ 
    console.log(arr[i]); 
} 
+0

是否每個值都以'('和')'開始和結束? – Ryan

+0

是的,我真的想從每個值中刪除(和)。 – Roth

回答

1

使用replace

var arr = ["(one)","(two)","(three)","(four)","(five)"]; 
for(var i = 0; i < arr.length; i++){ 
var x = arr[i]; 
x = x.replace(/[()]/g,""); 
console.log(x); 
} 

注:
我dedited,因爲alexander是正確的


所以ü需要使用正則表達式, 「G」 爲全球範圍內的搜索,
「 [「」]「查找裏面的所有字符

+1

如果OP關心,那麼''(test(ing)123)''會失敗。 –

0

這匹配(之後是不是)後跟)。也將失敗"(test(ing)123)",(如果你願意)

var arr = ["(one)","(two)","(three)","(four)","(five)"]; 
for(var i = 0; i < arr.length; i++) { 
    arr[i] = arr[i].replace(/\(([^)]+)\)/g, "$1"); 
} 

這是更爲簡單/更快(但可以說是更脆):

var arr = ["(one)","(two)","(three)","(four)","(five)"]; 
for(var i = 0; i < arr.length; i++) { 
    arr[i] = arr[i].substr(1, arr[i].length - 2); 
} 
1
var arr = ["(one)","(two)","(three)","(four)","(five)"]; 
for(var i = 0; i < arr.length; i++){ 
    var arrLength = arr[i].length -2; 
    var shortArr = arr[i].substr(1,arrLength); 
    console.log(shortArr); 
} 

這得到一個字符少的正面和返回

4

由於所有其他答案都不必要地複雜,因此這裏有一個簡單的答案:

arr = arr.map(s => s.slice(1, -1)); 

如果您願意,也可以在原地進行;重要的部分是.slice(1, -1),它從索引1(第二個字符)處的字符開始並在最後一個字符(-1)之前結束。

String.prototype.slice documentation on MDN

+0

將失敗''測試'' – Tibrogargan

+1

@Tibrogargan:請看清楚的評論,提問者確認*每個*值將以'('和')'開始和結束。 – Ryan

+0

's.substr(1,s.length -2)'比'slice(1,-1)'更有效率,for循環比map更高效。你怎麼選擇他們?沒關係,substr和slice似乎是相同的w /更多的測試 – Tibrogargan

0

這是速度快,應該工作無論多少括號在字符串中,將它們全部刪除。

arr[i] = arr[i].split(/\(|\)/g).join(""); 
+0

這並不快。它甚至比我的正則表達式還要慢 – Tibrogargan

+0

@Tibrogargan哈哈,你可能有一點我的正則表達式很慢,我對正則表達式不太熟練。我可以爲我的正則表達式做這個'/ [\\(\\)]/g',但我不知道它是否更有效率......當我說「快」時,我指的是使用string.split ()和string.join組合在JavaScript中...我可能應該澄清。 – JustSomeDude

+0

@Tibrogargan這個答案不會傳遞本頁提到的所有測試用例,包括「(test(ing)123)」,其中「更快」的正則表達式實際上會失敗......所以可以爭論你的正則表達式是否「更快」 :) – JustSomeDude