2011-02-23 94 views
1

我有一个字符串,可能看起来像这些之一,我想要在页面上显示此字符串,但删除所有尾随字符(空格,逗号)。是否有可能在JavaScript中包含其他字符jquery.Trim()

var string1 = "test, test1, test2, test3, "; 
var string2 = "test, test1, test2, test3 "; 
var string3 = "test, test1, test2, test3"; 

如果我使用jquery.Trim(),将用于字符串2和STRING3工作,但我希望有一个解决方案,将字符串1删除尾随comman为好。

什么是最好的方式来做到这一点的JavaScript,jquery ??

回答

2

最简单的方法是使用正则表达式。

your_string = your_string.replace(/,?\s+$/, ""); 

如果你想使用这个到处都可以更新$.trim采取这种方式正则表达式:

(function($){ 

var old_trim = $.trim; 

function trim() { 
    switch (arguments.length) { 
     case 2: 
      throw new Error("Invalid argument." + 
          " $.trim must be called with either a string" + 
          " or haystack, replacer, replacement"); 
      break; 
     case 3: 
      return arguments[0].replace(arguments[1], arguments[2]); 
     default: 
      return old_trim.call($, arguments); 
    } 
} 

$.trim = trim; 

})(jQuery); 

这种模式有时也被称为Duck Punching

+1

但是,如果有两个尾随逗号? ':)' – 2011-02-24 00:33:36

+1

@ŠimeVidas - *笑*真......或多个分号!如果需要过滤额外的字符,则可以更新正则表达式以包含它们 - @Roland Illig的正则表达式可以以这种方式扩展。 – 2011-02-24 00:48:07

+0

+1打鸭子 – 2013-08-20 10:13:42

1
var trimmed = "test3, \t\r\n".replace(/[\s,]+$/, ""); 

这正是正则表达式的好处。

+0

你的意思是替换? JavaScript中没有replaceAll。 – 2011-02-24 00:29:36

+0

糟糕。是的,我愿意。我在过去的日子里可能做了太多的Java。 :)它的答案是固定的。 – 2011-02-24 20:11:38

3

内部,jQuery.trim使用两个变量:

trimLeft = /^\s+/, 
trimRight = /\s+$/, 

这是私人的jQuery的功能,所以你不能改变他们(这是一件好事,因为其他代码可能取决于jQuery.trim工作它的方式)。

但是你可以很容易地与你所需要的,即使作为一个jQuery插件语义自己微调功能:

// your plugin: 
jQuery.trimCommas = function(text) { 
    return text == null ? 
     "" : 
     text.toString().replace(/^[\s,]+|[\s,]+$/g, ""); 
}; 

// your code: 
var string1 = "test, test1, test2, test3, "; 
alert($.trimCommas(string1)); 

看到这个小提琴:http://jsfiddle.net/Nwsur/

+0

它还会首先查看String对象是否有本地修剪功能并使用该功能。 – 2011-02-24 00:09:31

+0

是的,这可能是为什么jQuery.trim没有采取任何选择来改变它的行为,因为它意味着不能使用更快的String.prototype.trim – rsp 2011-02-24 00:23:22

相关问题