0

我使用 JavaScript 将我的字符串转换为 URL 的一个不错的永久链接,但是当我使用双倍或更多空间时,我有一个小问题,将其转换为 - 以及更多,如果我在此字符串的末尾使用它,请将其替换为- 像这样

this---is---a-test-right-now----

如果我得到这个,我想找回的字符串是跟随

this-is-a-test-right-now

sombardy 能帮我吗?

我自己的 Javascript 看起来像这样

function prototype( str )
{
    var ret = str;
    ret = ret.replace( /ø/g, 'oe' );
    ret = ret.replace( /Ø/g, 'OE' );
    ret = ret.replace( /å/g, 'aa' );
    ret = ret.replace( /Å/g, 'AA' );
    ret = ret.replace( /æ/g, 'ae' );
    ret = ret.replace( /Æ/g, 'AE' );
    ret = ret.replace( /\_/g, '-' );

    ret = ret.replace(/[^a-zA-Z0-9\/-]/ig,'-').replace(/_+/ig,'-').toLowerCase();

    return ret;
}
4

2 回答 2

1

在链中再添加一个替换将完成工作,通过查找-两次以上替换为一个-

replace(/[-]{2,}/g, '-')

上面的例子会寻找-超过两次的出现并用single替换它-并做它globally来实现它

function prototype( str )
{
    var ret = str;
    ret = ret.replace( /ø/g, 'oe' );
    ret = ret.replace( /Ø/g, 'OE' );
    ret = ret.replace( /å/g, 'aa' );
    ret = ret.replace( /Å/g, 'AA' );
    ret = ret.replace( /æ/g, 'ae' );
    ret = ret.replace( /Æ/g, 'AE' );
    ret = ret.replace( /\_/g, '-' );

    ret = ret.replace(/[^a-zA-Z0-9\/-]/ig,'-').replace(/_+/ig,'-').replace(/[-]{2,}/g, '-').toLowerCase();

    return ret;
}
于 2012-07-16T09:34:32.463 回答
1

最简单的方法是用一个破折号替换任何连续出现的地方,而不是用破折号代替每个出现的地方。

ret = ret.replace(/[^a-z0-9_\/]+/ig,'-').replace(/-+$/,'').toLowerCase();

第二个正则表达式摆脱了尾随破折号。

另请注意,这A-Z是不必要的,因为i修饰符使正则表达式不区分大小写。您还可以将前面的行缩短为 eg ret = ret.replace( /[æÆ]/g, 'ae' ),因为无论如何您都将字符串转换为小写。

于 2012-07-16T09:42:27.793 回答