在jQuery中用正则表达式替换空格为短横线

10

我有如下代码,它会在在一个字段中输入内容时自动填写另一个字段...

$('#title').bind('keyup keypress blur', function() 
{  

    var myStr = $(this).val()
        myStr=myStr.toLowerCase();
        myStr=myStr.replace(/ /g,"-");
        myStr=myStr.replace(/[^a-zA-Z0-9\.]+/g,"");
        myStr=myStr.replace(/\.+/g, "-");


    $('#filename').val(myStr); 
});

该代码可以移除任何非字母数字字符,但是我希望它把空格替换为连字符“-”。

如果我把破折号改成句点“.”,那么这个方法就有效了,但不知道原因或如何解决?正则表达式让我很困惑。

在这里查看JSFIDDLE

有谁能指出正确的方向吗?

更新:

现在用以下代码就可以按需求完成了...

<script>
$('#title').bind('keyup keypress blur', function() 
{  

    var myStr = $(this).val()
        myStr=myStr.toLowerCase();
        myStr=myStr.replace(/[^a-zA-Z0-9 ]+/g,"");
        myStr=myStr.replace(/\s+/g, "-");


    $('#filename').val(myStr); 
});
</script>

可能是用JavaScript替换空格为破折号的重复问题。 - user3334690
3个回答

9

我建议使用这个正则表达式,而不是你之前的那个:/(^\s+|[^a-zA-Z0-9 ]+|\s+$)/g。这个正则表达式可以防止在字符串的开头和结尾添加破折号,以防用户不小心在那里添加了空格。

$('#title').bind('keyup keypress blur', function() 
{  

    var myStr = $(this).val()
    myStr=myStr.toLowerCase();
    myStr=myStr.replace(/(^\s+|[^a-zA-Z0-9 ]+|\s+$)/g,"");   //this one
    myStr=myStr.replace(/\s+/g, "-");


    $('#filename').val(myStr); 
});

jsfiddle


9

\s 在正则表达式中表示空格符号 (\n, \r, \t, \f 和 " "):

myStr=myStr.replace(/\s+/g, "-");

5
这并不完全准确,\s 表示空白字符,包括制表符和换行符等。只有空格才是 / / - Daniël Knippers
请编辑您的答案以更正第一句话。正如@DaniëlKnippers所指出的那样,您目前正在提供误导性信息。 - MDEV

3
你正在撤销自己的工作:

你正在通过这种方式撤销你自己的工作:

myStr=myStr.replace(/[^a-zA-Z0-9\.]+/g,""); //removes dashes (-)

将其更改为以下内容:

myStr=myStr.replace(/[^a-zA-Z0-9\.-]+/g,"");

您说要删除除字母、数字和.之外的任何内容(因此删除破折号)

只需将破折号加入字符组即可解决问题。


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