正则表达式用连字符替换字符串中的所有特殊字符和空格

我有一个字符串,我需要替换所有特殊字符“〜!@#$%^&*()_ + =`{} [] |:;’,。/?” 和连字符的空格。 一行中的多个特殊字符应该生成一个连字符。

var mystring="Need !@#$%^\" to /replace this*(){}{}|\><? with_new string "; // desired output: "Need-to-replace-this-with-new-string" 

目前,我正在使用这一系列的replace()调用:

 return mystring.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-').replace(/\//g, "-"); 

但它正在输出:

 Need----------to/replace-this--------with-new-string; 

除了正斜杠之外,它为字符串中的每个特殊字符添加连字符。

我建议:

 var inputString = "~!@#$%^&*()_+=`{}[]|\:;'<>,./?Some actual text to keep, maybe...", outputString = inputString.replace(/([~!@#$%^&*()_+=`{}\[\]\|\\:;'<>,.\/? ])+/g, '-').replace(/^(-)+|(-)+$/g,''); console.log(outputString); 

JS小提琴演示 。

通过你的评论和例子:

 return mystring.trim().replace(/["~!@#$%^&*\(\)_+=`{}\[\]\|\\:;'<>,.\/?"\- \t\r\n]+/g, '-'); 

或者替换所有非字母数字字符:

 return mystring.trim().replace(/[^a-z0-9]+/gi, '-'); 

您还可以添加:

 .replace(/^-+/, '').replace(/-+$/, ''); 

杀掉任何前导或尾随破折号(此时你不再需要调用trim() )。

例:

 function cleanUp(st) { return st. replace(/[^a-z0-9]+/gi, '-'). replace(/^-+/, ''). replace(/-+$/, ''); } var mystring="Need !@#$%^\" to /replace this*(){}{}|\>