亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JS 正則表達式返回 -1 & 0

JS 正則表達式返回 -1 & 0

開心每一天1111 2022-09-16 21:47:07
我的任務如下:取一個字符串在新行上打印每個元音(按順序),然后...在新行上打印每個輔音(按順序)我發現的問題是正則表達式。我最初使用.../[aeiouAEIOU\s]/g但這會用元音返回0,用輔音返回-1(所以一切都反過來發生)。我真的很難理解為什么,并且無法為我的生活找到答案。最后,它很簡單,只是反轉字符串,但我想知道為什么會以這種方式發生。任何人都可以幫忙嗎?let i;let vowels = /[^aeiouAEIOU\s]/g;let array = [];function vowelsAndConsonants(s) {    for(i=0;i<s.length;i++){        //if char is vowel then push to array        if(s[i].search(vowels)){           array.push(s[i]);                 }            }    for(i=0;i<s.length;i++){        //if char is cons then push to array        if(!s[i].search(vowels)){           array.push(s[i]);                 }          }    for(i=0;i<s.length;i++){        console.log(array[i]);        }}vowelsAndConsonants("javascript");
查看完整描述

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('')

)


查看完整回答
反對 回復 2022-09-16
?
莫回無

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);

請提供預期輸入和輸出的示例。


查看完整回答
反對 回復 2022-09-16
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

您使用了:

/[^aeiouAEIOU\s]/g

而不是:

/[aeiouAEIOU\s]/g

^表示“不”,因此您的正則表達式計算所有輔音。/[^aeiouAEIOU\s]/g


查看完整回答
反對 回復 2022-09-16
?
翻閱古今

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);


查看完整回答
反對 回復 2022-09-16
  • 4 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號