javascript在字符串中交换字符

时间:2018-02-01 20:44:27

标签: javascript string

我们说我有一个像"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' )

5 个答案:

答案 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);