使用javascript/jQuery切换字符位置

使用javascript/jQuery切换字符位置,javascript,jquery,regex,Javascript,Jquery,Regex,我有一个字符串,例如: var string = 'This is a test sentence. Switch the characters. i .'; 我想切换字母“I”每次出现的位置,后面是字符,除非下面的字符是“t”或非字符,如“空格”或“换行符”。所以结果输出应该是这样的: Thsi si a test sentence. Switch the characters. i . // switches 's' but not 't' and 'space' 正则表达式可以完成这样

我有一个字符串,例如:

var string = 'This is a test sentence. Switch the characters. i .';
我想切换字母“I”每次出现的位置,后面是字符,除非下面的字符是“t”或非字符,如“空格”或“换行符”。所以结果输出应该是这样的:

Thsi si a test sentence. Switch the characters. i . // switches 's' but not 't' and 'space'

正则表达式可以完成这样的任务吗?我使用的字符是unicode字符。”我只是举个例子。这意味着匹配所有字符不是一个好主意。可能是而不是表达式?我尝试过一些循环替换,但它们并不优雅(或高效)。有什么想法吗?

您可以使用该形式的regex替换:

var string = 'This is a test sentence. Switch the characters. i .';
var result = string.replace(/(i)(?![t\s])(.)/g, "$2$1");

(i)
i
匹配并捕获到变量
$1

(?![t\s])
阻止
t
和空格的匹配

(.)
匹配任何其他字符并将其捕获到变量
$2

您可以使用正则表达式:
/(i)([^t\W])/gi

代码:

var string = 'This is a test sentence. Switch the characters. i .';
string.replace(/(i)([^t\W])/gi,"$2$1");

说明:


优雅的单衬里解决方案。非常好。谢谢@Dan,非常感谢您的反馈:)这太好了。对不起,我对正则表达式不太懂。如果我们想检查前面的角色,这会发生什么变化?@pewpewlasers您可能可以使用另一个捕获组(不幸的是,JS不支持lookbehinds)。假设另一个条件是,当
i
前面有空格时,不应进行切换。您可以这样做:
string.replace(/(\S|^)(i)(?![t\S])()/g,“$1$3$2”)
如果字符串类似于
var string='island',则
\S
将匹配非空格,
^
将匹配行首。正则表达式将与
\S
或(由
|
指示)
^
匹配。