9

我有一个字符串,我需要在其中替换所有特殊字符 "~!@#$%^&*()_+=`{}[]|:;'<>,./?" 和带连字符的空格。一行中的多个特殊字符应产生一个连字符。

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;

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

4

2 回答 2

14

我建议:

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

JS 小提琴演示

于 2013-09-21T19:35:53.377 回答
8

根据您的评论和示例:

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) );

于 2013-09-21T19:31:01.940 回答