我们说我有一个像"abcabcabc"
这样的字符串,我希望' a' s' s的位置发生变化,以便我最终与"bacbacbac"
。对此最优雅的解决方案是什么? (为了这个问题,我特此定义“优雅,快速和可读。”
我想出了
"abcabcabc".replace( /[ab]/g, function( c ){ return { 'a': 'b', 'b': 'a' }[ c ] } )
我既不快也不可读。但现在我想知道是否有更好的方法呢?
编辑:角色可以在任何位置。所以答案应该适用于" xyza123buvwa456" (当时" xyzb123auvwb456"也是。
EDIT2:" swap"似乎是错误的词。将所有a替换为b,将所有b替换为while,两者都是单个字符。
我还要投入其他几个:
"abcabcabc".replace( 'a', '_' ).replace( 'b','a' ).replace( '_', 'b' )
"abcabcabc".replace( /[ab]/g, function( c ){ return "ba".charAt( c.charCodeAt()-'a'.charCodeAt() ); } )
"abcabcabc".replace( /[ab]/g, function( c ){ return "ab".charAt( "ba".indexOf( c ) ) } )
我最终使用了Mark C的修改版本。答案:
"abcabcabc".replace( /[ab]/g, c => c == 'a' ? 'b' : 'a' )
答案 0 :(得分:5)
试试这个:
str.replace(/[ab]/g, function($1) { return $1 === 'a' ? 'b' : 'a' })
示例:
console.log("abcabcabc".replace(/[ab]/g, function($1) { return $1 === 'a' ? 'b' : 'a' }))

答案 1 :(得分:2)
replace
函数接受一个字符串作为第二个参数。
"abcabcabc".replace( /ab/g, "ba")
答案 2 :(得分:1)
您可以使用split
/ join
组合交换它们(如果它们始终相邻):
console.log("abcabcabc".split("ab").join("ba"))
与split / join方法一致,这里有一种将它们作为单个字符交换的方法(尽管它的可读性显着降低):
console.log("aabbccaabbcc".split("a").map(s => s.split("b").join("a")).join("b"));
答案 3 :(得分:1)
当我需要交换一长串字符\单词\字符串时,我使用此method!
该方法还可以防止再次替换已替换的字符串,例如:
String = "AAABBBCCC BBB"
Replace "AAABBBCCC" with "BBB", then, "BBB" with "DDD"
Final String = "BBB DDD"
请注意,只有原始字符串中的“ BBB”被替换为“ DDD”!从“ AAABBBCCC”替换的“ BBB”不会重新替换为“ DDD”!
答案 4 :(得分:0)
使用正则表达式直接替换:
var result = "abcabcabc".replace( /ab/g, "ba");
console.log(result);