4 回答
TA贡献1893条经验 获得超10个赞
if(vowels.test(s[i])){如果它匹配,它将返回 true 或 false,或者
,如果你想修复你的代码,
它是你想要的。
-1 不是假的,因此 if 语句将无法正常工作。-1 是搜索在未找到匹配项时返回的内容。它必须这样做,因为返回匹配的索引位置,并且索引可以是从0到无穷大的任何地方,因此只有负数可用于指示不存在的索引:
MDN search()引用if(s[i].search(vowels) !== -1){if(s[i].search(vowels) === -1){search()
下面是一个与元音或任何字母或其他匹配的正则表达式,有效地将元音,辅音和其他所有内容分成3个捕获组。这样,您就无需逐个字符进行测试并手动将它们分开。
然后迭代并将它们推送到具有 for-of 循环的各自数组中。
const consonants = [], vowels = [], other = [];
const str = ";bat cat set rat. let ut cut mut,";
for(const [,cons,vow,etc] of str.matchAll(/([aeiouAEIOU])|([a-zA-Z])|(.)/g))
cons&&consonants.push(cons) || vow&&vowels.push(vow) || typeof etc === 'string'&&other.push(etc)
console.log(
consonants.join('') + '\n' + vowels.join('') + '\n' + other.join('')
)
TA贡献1865条经验 获得超7个赞
我认为你没有正确理解你的正则表达式是如何工作的。在括号中,您只定义了一组要匹配的字符,并且通过将插入记号用作组中的第一个,您说您希望它与除插入记号中的字符之外的所有内容匹配。可悲的是,你没有提供输入和预期输出的示例,所以我只是猜测,但我认为你可以执行以下操作:/[^aeiouAEIOU\s]/g[^]
let s = "avndexleops";
let keep_vowels = s.replace(/[^aeiouAEIOU\s]/g, '');
console.log(keep_vowels);
let keep_consonants = s.replace(/[aeiouAEIOU\s]/g, '');
console.log(keep_consonants);
请提供预期输入和输出的示例。
TA贡献1851条经验 获得超3个赞
您使用了:
/[^aeiouAEIOU\s]/g
而不是:
/[aeiouAEIOU\s]/g
^表示“不”,因此您的正则表达式计算所有辅音。/[^aeiouAEIOU\s]/g
TA贡献1780条经验 获得超5个赞
有几个内置函数可用:
let some_string = 'Mary had a little lamb';
let vowels = [...some_string.match(/[aeiouAEIOU\s]/g)];
let consonents = [...some_string.match(/[^aeiouAEIOU\s]/g)];
console.log(vowels);
console.log(consonents);
添加回答
举报
