Javascript 正则表达式匹配由点分隔的字符串,只能包含字母数字、hypens、下划线和点

Javascript 正则表达式匹配由点分隔的字符串,只能包含字母数字、hypens、下划线和点,javascript,regex,string,Javascript,Regex,String,我需要一个符合以下条件的正则表达式: a、 不列颠哥伦比亚省 a0.b_uu.c a、 bca.\U cda.dca-fb 请注意,它可以包含数字,但组由点分隔。允许的字符为a-zA-z,-,0,0-9 规则是它不能以数字开头,也不能以点结尾。i、 e,正则表达式不应匹配 公元前0年 a、 不列颠哥伦比亚省 我已经提出了一个regex,它似乎可以在regex101上工作,但不能在javascript上工作 [a-zA-Z]+.?\w+.\w+ ` 但在js中似乎不起作用: var str=a.

我需要一个符合以下条件的正则表达式:

a、 不列颠哥伦比亚省

a0.b_uu.c

a、 bca.\U cda.dca-fb

请注意,它可以包含数字,但组由点分隔。允许的字符为a-zA-z,-,0,0-9

规则是它不能以数字开头,也不能以点结尾。i、 e,正则表达式不应匹配

公元前0年

a、 不列颠哥伦比亚省

我已经提出了一个regex,它似乎可以在regex101上工作,但不能在javascript上工作

[a-zA-Z]+.?\w+.\w+

`

但在js中似乎不起作用:

var str=a.b.c 如果str.match[a-zA-Z]+.?\w+.*\w+{ console.logmatch; }否则{ console.lognot匹配; } //表示不匹配使用前斜杠/并从在线正则表达式测试人员那里粘贴正则表达式代码,当您使用JavaScipt时

以下是我在您的正则表达式模式中所做的更改:

在正则表达式的开头添加^ 在末尾添加$以匹配输入的末尾 删除了A-Z并添加了i修饰符,用于不区分大小写的搜索。这是可选的。 另外,在使用时,确保在创建/测试正则表达式的JavaScript时选择JavaScript风格

变量模式=/^[a-z]+.?\w+.*\w+$/i; //应匹配的字符串列表 变量shouldMatch=[ “a.b.c”, “a0.b_uu.c”, “a.bca.\u cda.dca fb” ]; //不应匹配的字符串列表 变量shouldNotMatch=[ “0a.b.c”, “a.b.c.d.” ]; shouldMatch.forEachfunction字符串{ if string.matchpattern{ log'matched,应该是:'+string+''; }否则{ log“应该匹配,但它没有:”+string+”; } }; shouldNotMatch.forEachfunction字符串{ if!string.matchpattern{ console.log'不匹配,应该是:'+string+''; }否则{ log“不应该匹配,但它匹配了:”+string+”; }
}; 如果您使用锚来断言行的start^和end$,则正则表达式与您的值匹配

作为替代方案,您可以使用:

这将断言行^的开头,匹配将匹配[a-zA-Z0-9_uu]的单词字符\w或字符类[\w-]中的连字符

然后重复将匹配点和字符类中允许的字符的模式?:\.[\w-]+*直到行$

常量字符串=[ a、 公元前, A.b.c, a0.b_uu.c, a、 bca.\u cda.dca-fb, 公元前0年, a、 不列颠哥伦比亚省。 ]; let pattern=/^[a-z][\w-]*?:\.[\w-]+*$/i; strings.forEachs=>{ console.logs+=>+pattern.tests;
};正则表达式似乎是正确的,但代码不正确,当str=0a.b时,它表示匹配。c@KSplitX这是因为字符串中存在正则表达式匹配。就像在您的regex101中,链接行与0a.b.c匹配,并且a.b.c突出显示,因为这是匹配的部分。@KSplitX,我更新了我的答案,请检查一下。不值得接受吗?看起来是对的。