使用javascript将下划线替换为括号

使用javascript将下划线替换为括号,javascript,Javascript,我有一个字符串AverageLogon\u Seconds\u 我需要将第一个下划线替换为”(“和第二个下划线替换为”) 意味着我需要像AverageLogon(秒)那样获取文本 我已经用str.replace(/_/g,')进行了检查,但它将替换下划线iwth') 有人能帮我吗 谢谢使用回调和计数器变量进行操作。将替换为(位于奇数位置,)位于偶数位置,此时计数器变量可用于查找位置 var str='AverageLogon\u Seconds\u', i=0; var res=str.rep

我有一个字符串
AverageLogon\u Seconds\u

我需要将第一个下划线替换为
”(“
和第二个下划线替换为
”)

意味着我需要像
AverageLogon(秒)
那样获取文本

我已经用
str.replace(/_/g,')进行了检查,但它将替换下划线iwth')

有人能帮我吗

谢谢

使用回调和计数器变量进行操作。将
替换为
位于奇数位置,
位于偶数位置,此时计数器变量可用于查找位置

var str='AverageLogon\u Seconds\u',
i=0;
var res=str.replace(/g/g,函数(){
返回i++%2==0?'(':');
});
控制台日志(res)这行吗

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

那很容易。只需要一个班轮

testString = "AverageLogon_Seconds_";

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

console.log(replacedString);

输出:“AverageLogon(秒)”

我觉得将
“\u something”
模式作为一个整体作为目标更为谨慎。差不多

str.replace(/_([a-z0-9 -]+)_/gi, '($1)')
您可以根据希望出现在下划线之间的字符缩小该
[a-z0-9-]
字符类的范围。现在,我有字母、数字、空格和连字符


var测试=[
“AverageLogon\u秒”,
“AverageLogon_Seconds_和其他一些_数据”,
“哦,不,太多下划线了”],
out=document.getElementById('out'),
rx=/(a-z0-9-]+)\Ugi;
测试。forEach(功能(测试){
out.innerHTML+=test+'=>'+test.replace(rx,“($1)”)+'\n';
});

Pranav的解决方案很好。我倾向于写一些我可以很快推理的东西(例如,有时不那么优雅)。另一种方式(用DJ Khaled的声音读):

函数替换下划线(str){
返回str.split(“”“).map(函数(部分,索引){
如果(部分==''){
返回“”;
}
如果(索引%2==0){
返回部分+'(';
}否则{
返回部分+')';
}
}).加入(“”);
}
//“平均登录(秒)”

log(替换下划线('AverageLogon_Seconds_')
基于循环的方法是使用循环并处理字符串,但可能效率不高。删除全局标志
g
,然后重复
str.replace(//,“(”).replace(//,“)”)
在所有字符串出现的情况下,您只会得到两个括号吗?@DavidR不确定我是否需要用括号替换usimultaneously@tewathia,请加上这个作为回答。。这样我就可以把它标记为已接受。这对我来说非常好谢谢pranav。。。但是我认为这一个更重要perfect@Manu:仅当字符串中只有2个
\uuu
时,它才起作用。。。。如果有2个以上,则仅替换前两个。。。。否则,这是完美和简单的:)他们不想让你回答问题,所以记住,这只适用于不超过两个下划线的输入。这回答了眼前的问题,但并不普遍适用。
str.replace(/_([a-z0-9 -]+)_/gi, '($1)')