使用javascript替换下划线括号

时间:2016-08-02 06:57:18

标签: javascript

我有一个字符串AverageLogon_Seconds_

我需要将第一个下划线替换为'(',将第二个下划线替换为')'

意味着我需要获取AverageLogon(Seconds)等文字。

我已与str.replace(/_/g, ')');核对过,但它会取代下划线的第一个')。

任何人都可以帮助我。

由于

6 个答案:

答案 0 :(得分:4)

使用带回调和计数器变量的 String#replace 执行此操作。将_替换为(位于奇数位置,将)替换为偶数位置,其中计数器变量可用于查找位置。

var str = 'AverageLogon_Seconds_',
  i = 0;

var res = str.replace(/_/g, function() {
  return i++ % 2 == 0 ? '(' : ')';
});

console.log(res);

答案 1 :(得分:3)

我觉得将"_something_"模式作为一个整体来定位更为谨慎。像

这样的东西
str.replace(/_([a-z0-9 -]+)_/gi, '($1)')

您可以根据预期在下划线之间显示的字符缩小[a-z0-9 -]个字符类。现在,我有字母,数字,空格和连字符。

var tests = [
  'AverageLogon_Seconds_',
  'AverageLogon_Seconds_ and some other_data_',
  'Oh no, too_many_underscores___'],
    out = document.getElementById('out'),
    rx = /_([a-z0-9 -]+)_/gi;

tests.forEach(function(test) {
  out.innerHTML += test + ' => ' + test.replace(rx, '($1)') + '\n';
});
<pre id="out"></pre>

答案 2 :(得分:1)

var str = 'AverageLogon_Seconds_', replacement = ')';

//replace the last occurence  of '_' with ')'
str = str.replace(/_([^_]*)$/,replacement+'$1');

//replace the remaining '_' with '('
console.log(str);

答案 3 :(得分:1)

这很容易。只需要一个衬垫。

testString = "AverageLogon_Seconds_";

replacedString = testString.replace(/_/, '(').replace(/_/, ')');

console.log(replacedString);

输出:“AverageLogon(Seconds)”

答案 4 :(得分:1)

Pranav的解决方案很不错。我倾向于喜欢写一些我可以很快推理的东西(即有时候不那么优雅)。另一种方式(阅读DJ Khaled的声音):

&#13;
&#13;
function replaceUnderscores(str) {
  return str.split('_').map(function (part, ind) {
    if (part === '') {
      return '';
    }
    if (ind % 2 === 0) {
      return part + '(';
    } else {
      return part + ')';
    }
  }).join('');
}

// "AverageLogon(Seconds)"
console.log(replaceUnderscores('AverageLogon_Seconds_'));
&#13;
&#13;
&#13;

答案 5 :(得分:-2)

这会有效吗

var t = "AverageLogon_Seconds_";
var ctr=0;
while(t.contains('_')){
  if(ctr==0){
    t= t.replace('_','(');
    ctr++;
  }
  else{
    t= t.replace('_',')');
    ctr--;
  }
}