我有一个字符串,我需要替换所有特殊字符“〜!@#$%^& *()_ + =`{} [] |:;'<>,。/? “和连字符的空格。一行中的多个特殊字符应该生成一个连字符。
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;
除了正斜杠之外,它为字符串中的每个特殊字符添加连字符。
答案 0 :(得分:13)
我建议:
var inputString = "~!@#$%^&*()_+=`{}[]|\:;'<>,./?Some actual text to keep, maybe...",
outputString = inputString.replace(/([~!@#$%^&*()_+=`{}\[\]\|\\:;'<>,.\/? ])+/g, '-').replace(/^(-)+|(-)+$/g,'');
console.log(outputString);
答案 1 :(得分:7)
通过您的评论和示例:
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*(){}{}|\><? with_new string ";
console.log( cleanUp(mystring) );