我有一个字符串AverageLogon_Seconds_
我需要将第一个下划线替换为'('
,将第二个下划线替换为')'
。
意味着我需要获取AverageLogon(Seconds)
等文字。
我已与str.replace(/_/g, ')');
核对过,但它会取代下划线的第一个')。
任何人都可以帮助我。
由于
答案 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的声音):
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;
答案 5 :(得分:-2)
这会有效吗
var t = "AverageLogon_Seconds_";
var ctr=0;
while(t.contains('_')){
if(ctr==0){
t= t.replace('_','(');
ctr++;
}
else{
t= t.replace('_',')');
ctr--;
}
}