为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号