JavaScript的replace()方法未替换所有匹配的字符

10

我想使用 replace()/Admin/ListOfMovies 转换成 _Admin_ListOfMovies

var $id = id.replace('/', '_');

看起来它只替换了第一个“/”。怎么才能替换所有的“/”呢?
谢谢你的帮助。

可能是Javascript多重替换的重复问题。 - user2437417
我反复发现,“替换”操作的默认行为几乎是无用和危险的。在一般情况下,为什么我只想替换第一个出现的字符?为什么不是第二个、第三个或最后一个?由于其非常意外的行为,这种方法是一个主要的错误制造者。我建议在String.prototype中创建另一个名称的方法,使用Matt建议的正则表达式版本,并在团队中随处使用它。 - Cesar
4个回答

28

破折号删除器 --> stringWithDashes.replace(/-/g, ''); - beauXjames
@beauXjames 我不确定我理解你的意思。你介意详细说明一下吗? - Matt Ball
1
只是分享我在这里的存在理由...我不得不去除一些破折号,你的答案帮了我大忙...只是展示了如何使用破折号。 - beauXjames

10

我讨厌 JavaScript 的 replace 方法,因为它总是需要一个正则表达式。试试这个:

var $id=id.split("/").join("_");

从性能和意图清晰度的角度来看,我无法看出这种情况何时是可取的。 - Matt Ball
1
@MattBall 也许当您拥有一个动态分隔符并且不想转义它以构造RegExp对象时,可以这样做? - Fabrício Matté
3
在大多数编程语言中,使用“replace”函数可以直接把一个字符串替换为另一个字符串,而不必每次都用正则表达式。在JavaScript中,使用“subject.split(search).join(replacement)”这种方式来进行字符串替换是最接近普通字符串替换的方法。在JavaScript中,每次想要进行字符串替换时都必须使用正则表达式是荒谬的。 - chiliNUT

2
如果您不想使用全局标志,该标志会在字符串上执行两次替换函数,您可以使用以下方法,该方法更具体且仅替换一次;在其他情况下,这也很有用。
var $id = id.replace(/\/(\w+)\/(\w+)/, '_$1_$2');

0
function strReplace( str ) {
if( typeof str === 'string' ) {
    return text.replace( /[\/]/g, function( match, pos, originalText ) {
        if( match === '/' ){
            return '_';
        }
    });
}
return '';
}

console.log( strReplace( /Admin/ListOfMovies ) );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接