2016-08-24 114 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