Я не понимаю, что представляет собой "chr" в этой функции. Я понимаю, что «совпадение» должно представлять каждый символ в строке, которая соответствует регулярному выражению, а «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
1 ответ
Ваше регулярное выражение:
/([a-z]+)|([A-Z]+)/g
Состоит из двух «компонентов» (в скобках), и каждая совпадающая строка может соответствовать первому или второму компоненту.
chr
здесь относится ко всему, что соответствует первому компоненту, т. е. если ваша строка совпадает с первым компонентом, chr
будет равна вашей строке. В противном случае он будет оцениваться как undefined
.
В вашем конкретном случае это означает, что если ваше совпадение в нижнем регистре, chr
будет равно этому совпадению, и поэтому if(chr)
будет преобразовано в true
. Если ваше совпадение в верхнем регистре, chr
будет неопределенным, а if(chr)
будет преобразовано в false
.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
chr
относится только к группе захвата, используемой для символов нижнего регистра.str.replace(/[a-z]/ig, c => String.fromCharCode(c.charCodeAt(0) ^ 0x20));
будет эквивалентно.