18

基于以下字符串

...here..
..there...
.their.here.

如何.使用javascript删除字符串的开头和结尾,例如删除所有空格的修剪

输出应该是

here
there
their.here
4

6 回答 6

34

这些是此任务的 RegEx 的原因/(^\.+|\.+$)/mg

  1. 里面/()/是您编写要在字符串中找到的子字符串的模式的地方:

    /(ol)/这将在字符串ol中找到子字符串。

    var x = "colt".replace(/(ol)/, 'a');会给你 x == "cat"

  2. ^\.+|\.+$in被符号[means or]/()/分成两部分|

    ^\.+\.+$

    1. ^\.+意思是一开始就找到尽可能多.的。

      ^意味着在开始;\ 是转义字符;在字符后面添加 +意味着匹配包含一个或多个该字符的任何字符串

    2. \.+$意思是在最后找到尽可能多.的。

      $意味着最后。

  3. m后面用于指定如果/()/字符串具有换行符或回车符,则 ^ 和 $ 运算符现在将匹配换行符边界,而不是字符串边界。

  4. g后面/()/用于执行全局匹配:因此它会找到所有匹配项,而不是在第一次匹配后停止。

要了解有关 RegEx 的更多信息,您可以查看本指南

于 2013-10-02T10:49:52.097 回答
12

尝试使用以下正则表达式

var text = '...here..\n..there...\n.their.here.';
var replaced =  text.replace(/(^\.+|\.+$)/mg, '');
于 2013-10-02T10:31:49.100 回答
3

这是工作演示

使用正则表达式/(^\.+|\.+$)/mg

  • ^代表在开始
  • \.+一个或多个句号
  • $代表最后

所以:

var text = '...here..\n..there...\n.their.here.';
alert(text.replace(/(^\.+|\.+$)/mg, ''));
于 2013-10-02T10:34:37.650 回答
3

这是一个使用 String.prototype 的非正则表达式答案

String.prototype.strim = function(needle){
    var first_pos = 0;
    var last_pos = this.length-1;
    //find first non needle char position
    for(var i = 0; i<this.length;i++){
        if(this.charAt(i) !== needle){
            first_pos = (i == 0? 0:i);
            break;
        }
    }
    //find last non needle char position
    for(var i = this.length-1; i>0;i--){
        if(this.charAt(i) !== needle){
            last_pos = (i == this.length? this.length:i+1);
            break;
        }
    }
    return this.substring(first_pos,last_pos);
}
alert("...here..".strim('.'));
alert("..there...".strim('.'))
alert(".their.here.".strim('.'))
alert("hereagain..".strim('.'))

并看到它在这里工作:http: //jsfiddle.net/cettox/VQPbp/

于 2013-10-02T10:43:43.023 回答
1

使用带有 javaScript替换的 RegEx

var res = s.replace(/(^\.+|\.+$)/mg, '');
于 2013-10-02T10:32:52.657 回答
1

稍微更代码高尔夫球,如果不可读,非正则表达式原型扩展:

String.prototype.strim = function(needle)   {
    var out = this;
    while (0 === out.indexOf(needle))
        out = out.substr(needle.length);
    while (out.length === out.lastIndexOf(needle) + needle.length)
        out = out.slice(0,out.length-needle.length);
    return out;
}

var spam = "this is a string that ends with thisthis";
alert("#" + spam.strim("this") + "#");

小提琴色

于 2015-01-26T15:26:22.863 回答