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);
添加回答
舉報