如果字符串 M 包含术语 A 和 B ,我想用每个 A 代替 B 和每个 B A 到 M'。天真的人会尝试用 B 替换 A ,然后用 A 替换 B ,但在这种情况下 M'仅包含 A 。我可以考虑更换条款并记录其位置,以便不再重新替换这些条款。当我们只有A和B来替换时,这种方法有效。但是如果我们需要替换超过2个术语并且它们的长度不同那么它就变得棘手了。
所以我想这样做:
有更有效的方法吗?
答案 0 :(得分:0)
这是一个正则表达式解决方案:
var M = 'foobazbar123foo match';
var pairs = {
'foo': 'bar',
'bar': 'foo',
'baz': 'quz',
'no': 'match'
};
var re = new RegExp(Object.keys(pairs).join('|'),'g');
alert(M.replace(re, function(m) { return pairs[m]; }));
注意:这是演示/ POC。一个真正的实现必须处理查找字符串的正确转义。
答案 1 :(得分:0)
另一种方法是用中间临时字符串(符号)替换字符串,然后用原始对应符号替换符号。因此,转化def blah():
return 1
blah()
可以分两步进行转换,例如'foo' => 'bar'
。然后,其他转化'foo' => '___1' => 'bar'
将成为'bar' ==> 'foo'
。这样可以防止您描述的混淆。
与其他答案相同的示例的示例python代码如下:
'bar' ==> '___2' ==> 'foo'