Javascript 我想匹配不以字母[aoieu]开头的单词,但正则表达式不起作用
我想匹配不以字母[aoieu]开头的单词。返回数组的第一项是“shenmajs”,第三项是“HGHG”。我不明白为什么“)”可以包含该项目。你能帮助我吗?谢谢以下是您在regexr的案例在线视图: 之所以包含“”),是因为regexJavascript 我想匹配不以字母[aoieu]开头的单词,但正则表达式不起作用,javascript,regex,Javascript,Regex,我想匹配不以字母[aoieu]开头的单词。返回数组的第一项是“shenmajs”,第三项是“HGHG”。我不明白为什么“)”可以包含该项目。你能帮助我吗?谢谢以下是您在regexr的案例在线视图: 之所以包含“”),是因为regex[^aeiou]表示非a、e、i、o或u的任何字符。其中包括“)” 正则表达式的工作方式与锚\b的解释方式有关。从 有三种不同的位置可以作为单词边界: 如果第一个字符是世界字符,则在字符串中第一个字符之前 如果最后一个字符是单词字符,则在字符串中最后一个字符之后 在字
[^aeiou]
表示非a、e、i、o或u的任何字符。其中包括“)”
正则表达式的工作方式与锚\b
的解释方式有关。从
有三种不同的位置可以作为单词边界:
因此,您的第一个
\b
在第一个s之前匹配,而不是在首字母“)之前匹配(因为根据规则1,您没有获得初始单词边界)。第一场比赛在冲刺前以抛锚结束。下一场比赛从“(“和s,因为你不能从破折号开始比赛!(试试!)。你的第三场比赛现在将从b和“)”之间的锚开始。由于“)”不在[aeiou]
中,因此允许开始下一场比赛。它也非常有效:它后面紧接着是零个或多个a-z,并带有一个结束词边界 以下是您在regexr的案例在线视图:
之所以包含“”),是因为regex[^aeiou]
表示非a、e、i、o或u的任何字符。其中包括“)”
正则表达式的工作方式与锚\b
的解释方式有关。从
有三种不同的位置可以作为单词边界:
因此,您的第一个
\b
在第一个s之前匹配,而不是在首字母“)之前匹配(因为根据规则1,您没有获得初始单词边界)。第一场比赛在冲刺前以抛锚结束。下一场比赛从“(“和s,因为你不能从破折号开始比赛!(试试!)。你的第三场比赛现在将从b和“)”之间的锚开始。由于“)”不在[aeiou]
中,因此允许开始下一场比赛。它也非常有效:它后面紧接着是零个或多个a-z,并带有一个结束词边界 您的正则表达式正在选择”)hghghg“
,因为它以一个不是a、o、i、e或u的字符开头,然后后跟0个或更多字母
尝试:
也就是说,所有单词都以非元音字母(a、e、i、o或u)开头,然后后跟0个或多个字母。您的正则表达式选择了
”)hghghg“
,因为它以非a、o、i、e或u的字符开头,然后后跟0个或多个字母
尝试:
也就是说,所有单词都以非元音字母(a、e、i、o或u)开头,然后后跟0个或多个字母。我知道[^aoieu]是指不是a、o、i、e或u的字符,然后后跟0个或多个字母。但是“\b”表示一个单词的位置,它以“\w”开头,不是吗?关于单词边界问题的详细信息,请参考下面@ray toal的回答。那么,返回的数组如何包含“)hghghg”我同意这不是直观的,我很惊讶边界包含了
)
。但我认为这可以归结为,因为您明确地包含了一个“不是a、e、I、o、u的字符”,它会包含在边界内的匹配中(否则只包含/w)。我已经确认(至少在我工作的.NET中)这一点:\b\).\b
将捕获相同的匹配,而\b\w*\b
确实会删除)
我知道[^aoieu]表示一个不是a、o、I、e或u的字符,然后后跟0或更多字母。但是“\b”表示一个单词的位置,它以“\w”开头,不是吗?关于单词边界问题的详细信息,请参考下面@ray toal的回答。那么,返回的数组如何包含“)hghghg”我同意这不是直观的,我很惊讶边界包含了)
。但我认为这可以归结为,因为您明确地包含了一个“不是a、e、I、o、u的字符”,它会包含在边界内的匹配中(否则只包含/w)。我已经确认(至少在我工作的.NET中)这个:\b\).\b
将捕获相同的匹配,而\b\w*\b
确实会删除)
var str = ")shenmajs-(shenmajsb)hghghg";
var reg = /\b[^aoieu][a-z]*\b/g;
str.match(reg);
//returns ["shenmajs", "shenmajsb", ")hghghg"]
var reg = /\b[a-z-[aeiuo]][a-z]*\b/g;