JavaScript 正则表达式 - 去除开头和结尾的空格

4
我花了大约3个小时来解决以下挑战,但我的代码都无法正常工作。决定查看解决方案以了解为什么它不能正常工作。当我查看解决方案时,我感到困惑,因为我认为\s是用于识别空格而不是删除它们...有人能帮忙解释一下为什么要使用\s而不是\S以及为什么使用空字符串("")来去除两端的空格吗? 挑战: 编写一个正则表达式并使用适当的字符串方法来删除字符串开头和结尾的空格。
//SOLUTION

let hello = "   Hello, World!  ";
let wsRegex = /^\s+|\s+$/g; 
let result = hello.replace(wsRegex, "");

1
该代码识别空格字符,然后用空字符串替换它们。通过用“无”替换某些内容,我们得到与删除某些内容相同的结果。 - PM 77-1
它正在查找空格并用空字符串替换它所找到的内容,也就是将其删除。 - Andy Ray
你决定实现.trim()函数。 - Amir Azizkhani
4个回答

12
  • \s表示正则表达式中的空白字符,如空格制表符等。
  • ^表示字符串的开头。
  • $表示字符串的结尾。
  • |表示OR(匹配左侧或右侧)。
  • +表示1个或多个(基于左侧规则)。
  • /a regex/g中的g表示"全局",即"匹配多次",因为你可能需要在开头和结尾都进行匹配。

所以这个正则表达式的含义是:

/^\s+|\s+$/g
/         /       Wrap the regex (how you do it in JS)
 ^\s+             Try to match at the beginning one or more whitespace chars
     |            Or...
      \s+$        Try to match whitespace chars at the end
           g      Match as many times as you can

String.prototype.replace 用第二个参数提供的字符串替换正则表达式中找到的匹配项,本例中是一个空字符串。

因此,内部处理过程如下:

  1. 查找与正则表达式匹配的所有部分(这将是开头和结尾处的空格)
  2. "" 替换每个匹配项,完全删除这些匹配项

let hello = "   Hello, World!  ";
let wsRegex = /^\s+|\s+$/g; 
let result = hello.replace(wsRegex, "");

console.log('"' + result + '"');

大多数人在使用全局标记时,使用String.prototype.replaceAll而不是.replace

let hello = "   Hello, World!  ";
let wsRegex = /^\s+|\s+$/g; 
let result = hello.replaceAll(wsRegex, "");

console.log('"' + result + '"');


感谢您详细的解释,现在我完全明白了。 - Cristian M.

0
replace的第二个参数是用来替换第一个参数匹配到的内容的。
正则表达式将匹配/选择字符串开头(^)和结尾($)处的空格,并将其替换为""。
当您使用/(\S)/g这样的正则表达式时,您将匹配除空格以外的所有内容,在这种情况下,您将使用类似hello.replace(/(\S)/g, '$1')的内容; $1表示您的正则表达式的第一组。

-1
我知道这是旧的,但对于任何人提出同样的问题 他就是这个挑战的答案
让我们来看一下代码: let hello = " Hello, World! "; let wsRegex = /(\s*)(\S+ \S+)(\s*)/; // 更改这一行 let result = hello.replace(wsRegex,"$2")

console.log(result);


你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community
这对于像" Hello, nice world! "这样的输入是失败的。 - undefined

-2

let str = "__ @!Hello World___-!! "

console.log(str); //"__ @!Hello World___-!! "

console.log(str.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g, '')); //"Hello World"


1
问题是关于删除空格,这个答案会除了字母数字以外的所有内容。 - AdrianHHH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接