JavaScript正则表达式-从开始和结束处删除空白

gz5pxeao  于 2023-04-19  发布在  Java
关注(0)|答案(3)|浏览(97)

我在下面的挑战中工作了大约3个小时,我的代码都没有工作。决定看看解决方案,以了解为什么我没有工作。当我看到解决方案时,我感到困惑,因为我认为\s是为了识别白色而不是删除它们......有人能给予我解释一下为什么使用\s而不是\S,以及为什么使用空字符串(“”)来去掉两端白色。

*挑战

编写一个正则表达式,并使用适当的字符串方法来删除字符串开头和结尾的空格。

//SOLUTION

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

ws51t4hk1#

  • \s表示正则表达式中的空白字符,如空格、制表符等。
  • ^表示字符串的开头
  • $表示字符串的结尾
  • |表示OR(匹配左侧或右侧)
  • +表示1或更多(基于左侧的规则)
  • /a regex/gg意味着“全局”,也就是“多次匹配”,因为您可能需要在开始和结束时进行匹配

所以正则表达式的意思是:

/^\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.查找所有与regex匹配的节(开头和结尾都是空白
1.用""替换每个匹配项,完全删除这些匹配项

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 + '"');
ff29svar

ff29svar2#

replace的第二个参数用于替换第一个参数的匹配项。
正则表达式将匹配/选择字符串开头(^)和结尾($)的空格,然后将被替换为“"。
当你使用正则表达式/(\S)/g时,你匹配除了空格之外的所有内容,在这种情况下,你将使用类似hello.replace(/(\S)/g, '$1')的东西;
$1表示正则表达式的第一组。

y3bcpkx1

y3bcpkx13#

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

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

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

相关问题