2

正则表达式单词边界。

根据Regular_Expressions 指南\b匹配单词边界,例如空格、换行符、标点符号或字符串结尾。

我正在尝试更改以下字符串。

"
    abc
"

"abc"

我确实尝试了以下方法,但它不起作用。有任何想法吗?

"  abc  ".replace(/\b/,""); 
4

3 回答 3

3

单词边界的描述写得很糟糕(不幸的是,这种情况经常发生)。您会在此处找到更好的参考。

单词边界是一个零宽度断言:它不消耗任何字符,它只是断言一个条件为真。在这种情况下,它断言当前位置后跟一个单词字符但前面没有一个,或者前面有一个单词字符但后面没有一个。

如果您想匹配任何不是单词字符的内容,请使用\W(注意大写W)。但是您实际上只需要匹配空格,即\s

"  abc  ".replace(/\s+/, ""); 

如果您尝试执行传统的修剪操作,则需要使用锚来确保仅匹配字符串开头或结尾的空格:

"  abc  ".replace(/^\s+|\s+$/, ""); 
于 2012-07-19T09:18:04.123 回答
0

\b只匹配没有空格的边界,在空格和第一个/最后一个字母之间选择位置。

用这个:

//fulltrim replaces all new lines with space and reduces doubled spaces
String.prototype.fulltrim=function(){return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');}

//just trim spaces from begging and ending of string
String.prototype.trim=function(){return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');};

用法

"    ssss   ".fulltrim();
"    
   ssss 
".fulltrim();

一些浏览器已经实现了trim方法。

于 2012-07-19T08:56:06.273 回答
0

\b本身不匹配字符,它匹配位置。就像^$

"\n\t   \n  hello world \t  \n\n".replace(/^\s*/, "").replace(/\s*$/, "");
// return "hello world"
于 2012-07-19T08:56:48.800 回答