Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的修剪?这段代码在做什么?_Javascript_Regex_Trim - Fatal编程技术网

javascript中的修剪?这段代码在做什么?

javascript中的修剪?这段代码在做什么?,javascript,regex,trim,Javascript,Regex,Trim,我在寻找JavaScript中不存在的trim函数,Google上的一些代码建议使用: function trimStr(str) { return str.replace(/^\s+|\s+$/g, ''); } 我想知道如何str.replace(/^\s+\s+$/g') 作品我知道这是某种形式的正则表达式,但不知道它在做什么。^是字符串的开头,$是字符串的结尾\s表示空白字符(在JavaScript中特别表示制表符、垂直制表符、换行符、空格、非换行符、字节顺序标记、Unicode空

我在寻找JavaScript中不存在的trim函数,Google上的一些代码建议使用:

function trimStr(str) {
  return str.replace(/^\s+|\s+$/g, '');
}
我想知道如何
str.replace(/^\s+\s+$/g')

作品我知道这是某种形式的正则表达式,但不知道它在做什么。

^
是字符串的开头,
$
是字符串的结尾
\s
表示空白字符(在JavaScript中特别表示制表符、垂直制表符、换行符、空格、非换行符、字节顺序标记、Unicode空格分隔符(Zs类)、换行符、回车符、换行符或段落分隔符),
+
表示1或更多<代码>|是交替,是两种可能性之间的选择
g
是全局标志。所以regex表示开始,然后是一个或多个空格,或者一个或多个空格,然后是结束。然后,我们用空字符串替换所有匹配项(因为它是全局的)


您可能会对此感兴趣,它的分析比您可能需要的更详细:)各种修剪函数的优缺点。

/^\s+\s+$/g
从字符串的开头或结尾搜索空格。表达式可以分为两部分,
^\s+
\s+$
,这两部分由
|
分隔(或)。第一部分从字符串的开头(
^
)开始,并包含尽可能多的空白字符(
\s+
)。第二部分也做了同样的事情,但相反,最后使用美元符号(
$

在简单的英语中,正则表达式如下所示:

从字符串开头查找尽可能多的空白字符,或从字符串结尾查找尽可能多的空白字符

请注意,
\s
匹配空格、制表符和换行符


结尾处的
/g
部分启用全局搜索,允许多次替换(例如,不仅是字符串的开头,还包括字符串的结尾)。

\s
意味着不仅仅是一个空格(它意味着空白)。在JS中,它包含字符
[\r\n\t]
@Andy,谢谢,我实际上知道这一点,但表达得不好。我不是说它只是ASCII 0x20(实际空间)。我已经澄清了;实际上比你说的多了几个字符。做得好,为了进一步的澄清,我只加入了我完全确定的字符。但是,您应该知道,
\s
的指定仅与ECMA-262第5版(第3版中未包含)的BOM相匹配。此外,在Internet Explorer版本8之前的版本中,
\s
匹配的确切字符相当于
[\f\n\r\t\v]
-因此您的列表不是实现完全跨浏览器兼容性的理想参考。@Andy,是的,我注意到BOM在附录E中被标记为一个附加项。谢谢你关于IE的注释。随着浏览器bug的出现,这是很小的问题。有多少人在文本框中输入不间断空格或换行符?如果这很重要,无论如何都应该在服务器端进行过滤。同意。这样的事情通常只发生在复制/粘贴过程中。除了/g之外,我什么都知道了。你能再解释一下吗?我把它和“/g部分搞混了,最后启用了全局搜索”为什么我们需要它。因为我们已经包括了开始和结束的条件string@sushil,这里的全局标志表示可以有多个替换。没有它,它只会取代第一场比赛。比如说<代码>“foo”。替换(/^\s+\s+$/,“”)(无全局)是
“foo”