【问题标题】:Regexp word boundary正则表达式单词边界
【发布时间】:2012-07-19 08:52:37
【问题描述】:

正则表达式单词边界。

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

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

"
    abc
"

"abc"

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

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

【问题讨论】:

  • 看看下面提供的答案,那些可能更适合你。
  • 您链接到的文档有误。感谢您指出了这一点。也许拥有 MDN 帐户的人可能想要更正它?
  • @TimPietzcker 已编辑条目。我已经查看了整个表格,并为其添加了锚点,以便更容易在文档中引用特定的转义字符 - 请参阅 developer-new.mozilla.org/en-US/docs/JavaScript/Guide/…

标签: javascript regex


【解决方案1】:

单词边界的描述写得很糟糕(不幸的是,这种情况经常发生)。你会发现一个更好的参考here

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

如果您想匹配任何非单词字符,请使用\W(注意大写W)。但是你真的只需要匹配空格,也就是\s

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

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

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

【讨论】:

  • 我一直在为为什么 \b 在我的非捕获组失败的某些情况下工作而苦苦挣扎。您关于单词边界是零宽度断言的声明比我过去几天读到的任何内容都更能说明问题。感谢您如此简洁地陈述独特​​性并阐明其中的作用
【解决方案2】:

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

"\n\t   \n  hello world \t  \n\n".replace(/^\s*/, "").replace(/\s*$/, "");
// return "hello world"

【讨论】:

    【解决方案3】:

    \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方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 2011-03-28
      • 2014-06-07
      • 2012-09-24
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      相关资源
      最近更新 更多