字符串使用正则表达式替换正则表达式字符类

时间:2016-08-24 00:29:14

标签: javascript regex

此字符串具有需要删除的正则表达式字符类。以及将多个空间减少到单个空间 我可以链接replace(),但想想是否可以建议一个正则表达式代码一次完成整个工作。怎么做到呢?感谢

  

" \ n \ t \ t \ t \ n \ n \ t \ n \ t \ t \ t \ t食物和饮料\ n \ t \ n"

这是必要的:

  

"食物和饮料"

var newStr = oldStr.replace(/[\t\n ]+/g, '');  //<-- failed to do the job

2 个答案:

答案 0 :(得分:2)

我建议使用此模式(假设您希望在主字符串中保留\n\t):

/^[\t\n ]+|[\t\n ]+$/g

如果您不想保留它们,可以使用以下内容:

/^[\t\n ]+|[\t\n]*|[\t\n ]+$/g

答案 1 :(得分:2)

您想要删除所有前导和尾随空格(空格,制表符,换行符),但将空格留在内部字符串中。您可以使用空白字符类\s作为简写,并将 匹配字符串的开头或结尾。

var oldStr = "\n\t\t\t \n\n\t \n\t \t\tFood and drinks \n \t\n";

// ^\s+ => match one or more whitespace characters at the start of the string
// \s+$ => match one or more whitespace characters at the end of the string
// | => match either of these subpatterns
// /g => global i.e every match (at the start *and* at the end)

var newStr = oldStr.replace(/^\s+|\s$/g/, '');

如果你还想将内部空间减少到一个空格,我 建议使用两个正则表并链接它们:

var oldStr = "\n\t\t\t \n\n\t \n\t \t\tFood   and      drinks \n \t\n";
var newStr = oldStr.replace(/^\s+|\s+$/g, '').replace(/\s+/g, ' ');

在第一个.replace()删除所有前导和尾随空格后,只留下内部空格。用一个空格替换一个或多个空格/制表符/换行符的运行。

另一种方法可以是将空格的所有运行减少到一个空格,然后修剪剩余的前导空格和尾随空格:

var oldStr = "\n\t\t\t \n\n\t \n\t \t\tFood   and      drinks \n \t\n";

var newStr = oldStr.replace(/\s+/g, ' ').trim();
// or reversed
var newStr = oldStr.trim().replace(/\s+/g, ' ');
ES5.1(ECMA-262)之前不存在

.trim(),但polyfill基本上是.replace(/^\s+|\s+$/g, '')(添加了几个其他字符)。