1

我需要像这样调整一个字符串:

需要调整的情况:

Case a: "        ", becomes ""
Case b: "z       ", becomes "z"
Case c: "        z", becomes "z"

不应该调整的情况:

案例 d:“z”,保持不变

Case e: "zzz zz          zzz", stays the same

我怎样才能在javascript中实现这一点?

4

4 回答 4

3

Xander启发,试试这个,匹配除变量 e 之外的所有变量:

return s.replace(/^(\s+$|\w{1}\s+$|\s+\w{1}$|\s+\w{1}\s+$)/i, "Bingo");

这是演示,希望这可以帮助你:P

于 2013-11-15T01:12:13.017 回答
3

您可以使用String.trim()这种情况。它从字符串中删除前导和尾随空格。许多现代浏览器都支持这种方法,它可以让你重写上面的代码更短。

mystring = mystring.trim()

对于不支持 的浏览器,请String.trim()使用正则表达式创建您自己的方法。

if (!String.prototype.trim) {
  String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, '');
  }
}

或者,对于大多数情况,直接使用它会执行相同的操作。

mystring.replace(/^\s+|\s+$/g, '')

live demo

于 2013-11-15T00:32:59.850 回答
3

您应该使用 ES5.trim()方法:

"        ".trim(); // "";
"z       ".trim(); // "z";
"       z".trim(); // "z";
"   z    ".trim(); // "z";
"zzz zz          zzz".trim(); // "zzz zz          zzz";

为了与旧浏览器兼容,您可以在脚本开头添加以下内容:

if (!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^\s+|\s+$/g, '');
  };
}
于 2013-11-15T00:34:41.877 回答
1

足够你使用trim功能了;但string.trim();不适用于所有浏览器...

尝试这个:

String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');};

String.prototype.ltrim=function(){return this.replace(/^\s+/,'');};

String.prototype.rtrim=function(){return this.replace(/\s+$/,'');};

String.prototype.fulltrim=function(){return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');};

由于新的浏览器 (IE9+)trim()已经实现,您应该只trim()在 Prototype-Object 上不可用的情况下实现(覆盖它会对性能造成巨大影响)。在扩展 Native Objects 时通常建议这样做!请注意,除非您使用 ES5,否则添加的属性是可枚举的Object.defineProperty

if (!String.prototype.trim) {
   //code for trim
}
于 2013-11-15T00:46:37.707 回答