6

可能重复:
如何在 javascript 中修剪字符串?

通过在 javascript 中使用 replace 方法,我试图删除字符串开头和结尾之间的空格:

这是我的代码:

知道我应该如何获得结果吗?

input  -> "   first second     ".replace(/[^\s|\s$]/g, ''); // " "
output -> "first second"
4

6 回答 6

4

这称为修剪。

您需要括号而不是正则表达式中的方括号,还需要空格说明符上的乘数以匹配多个空格:

var s = "   first second     ".replace(/(^\s+|\s+$)/g, '');

演示:http: //jsfiddle.net/Guffa/N7xxt/

于 2012-08-22T12:29:26.497 回答
3

在脚本的开头添加:

// Add ECMA262-5 string trim if not supported natively
//
if (!('trim' in String.prototype)) {
    String.prototype.trim= function() {
        return this.replace(/^\s+/, '').replace(/\s+$/, '');
    };
}

然后用于yourString.trim()删除字符串开头和结尾的空格。

于 2012-08-22T12:27:47.823 回答
1

您应该使用括号 () 来指定要匹配管道“|”的左侧或右侧 符号,而不是方括号。方括号实际上匹配字符集(即,[grapes] 将匹配“g”、“r”、“a”、“p”、“e”或“s”的单个实例,而 (grapes|apples)将匹配“葡萄”或“苹果”)。

此外,您缺少的另一件事是“数量”的指示。换句话说,一旦你匹配了一个空格(\s),它应该寻找多少个空格?在您的示例中,它仅匹配单个空格字符。您可能希望匹配字符串左侧和右侧存在的尽可能多的连续空格。为此,您需要在字符 \s 之后立即附加 *(匹配零个或多个)或 +(匹配一个或多个)。

所以,要重写你的正则表达式:

var input = "      first second      ";
var trimmed = input.replace(/(^\s+|\s+$)/g, '');
console.log(trimmed);

您可以将这些行复制并粘贴到 JavaScript 控制台中,以查看是否获得了所需的输出。这里的正则表达式字面意思是,“匹配字符串开头的一个或多个空格字符,或者一个或多个空格字符紧跟字符串结尾。” 然后 replace 函数获取该匹配项并将其替换为 ''。

于 2012-08-22T12:42:46.367 回答
0

为什么要更换方法?只需使用修剪。IE。来自 jQuery 库

http://api.jquery.com/jQuery.trim/

于 2012-08-22T12:25:59.787 回答
0

您可以使用 jQuery 修剪。

<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
        <pre id="original"></pre>
        <pre id="trimmed"></pre>
<script>
  var str = "         first second         ";
  $("#original").html("Original String: '" + str + "'");
  $("#trimmed").html("After trimed: '" + $.trim(str) + "'");
</script>

</body>
</html>
于 2012-08-22T12:29:43.887 回答
0

对您的模式进行一点修改:

(^\s+|\s+$)

进而

var string = "     test     ";
string.replace(/(^\s+|\s+$)/gm, '');

应该管用 ;-)

于 2012-08-22T12:30:16.397 回答