Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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 Don';无法理解第二个参数。replace()字符串方法_Javascript - Fatal编程技术网

Javascript Don';无法理解第二个参数。replace()字符串方法

Javascript Don';无法理解第二个参数。replace()字符串方法,javascript,Javascript,我不明白“chr”代表什么或在这个函数中是什么。我知道“match”必须表示字符串中与正则表达式匹配的每个字符,“chr”必须用于确定每个字符是大写还是小写,但我不知道它是如何工作的,也不知道它是如何确定真/假值的 let swapcase = str => { return str.replace(/([a-z]+)|([A-Z]+)/g, (match, chr) => { if (chr) { return match.toUpperCase()

我不明白“chr”代表什么或在这个函数中是什么。我知道“match”必须表示字符串中与正则表达式匹配的每个字符,“chr”必须用于确定每个字符是大写还是小写,但我不知道它是如何工作的,也不知道它是如何确定真/假值的

let swapcase = str => {
  return str.replace(/([a-z]+)|([A-Z]+)/g, (match, chr) => {
    if (chr) {
      return match.toUpperCase()
    } else {
      return match.toLowerCase()
    }
  })
}
console.log(swapcase('DdishDJSK')) // logs dDISHdjsk

您的正则表达式:

/([a-z]+)|([A-Z]+)/g
由两个“组件”(括号中)组成,每个匹配的字符串可以是第一个组件的匹配项,也可以是第二个组件的匹配项

chr
这里指的是与第一个组件匹配的任何内容,即如果您的字符串恰好与第一个组件匹配,
chr
将等于您的字符串。否则它将计算为
未定义


在您的特定情况下,这意味着如果匹配为小写,
chr
将等于此匹配,因此
if(chr)
将解析为
true
。如果匹配为大写,
chr
将未定义,
If(chr)
将解析为
false

正则表达式中有两个不同的捕获组
chr
仅指用于小写字符的捕获组。
str.replace(/[a-z]/ig,c=>String.fromCharCode(c.charCodeAt(0)^0x20))
将是等效的。@PatrickRoberts为True,但根据ASCII编码的细节,这是一种糟糕的风格。仅供参考,“组件”通常称为“捕获组”。这是否意味着如果在“chr”之后有第三个参数,它将引用正则表达式的第二个组件或捕获组?@NicoFederico是,确切地