我需要一个与以下内容匹配的正则表达式:
a.b.c
a0.b_.c
a.bca._cda.dca-fb
请注意,它可以包含数字,但组之间用点分隔。允许的字符为 a-zA-z、-、_、0-9
规则是不能以数字开头,也不能以点结尾。即,正则表达式应该不匹配
0a.b.c
a.b.c.d.
我想出了一个正则表达式,它似乎适用于 regex101,但不适用于 javascript
([a-zA-Z]+.?)((\w+).)*(\w+)
但在js中似乎不起作用:
var str = "a.b.c"
if (str.match("([a-zA-Z]+.?)((\w+).)*(\w+)")) {
console.log("match");
} else {
console.log("not match");
}
// says not match
最佳答案
如果您使用 anchor 断言该行的开头 ^
和结尾 $
,则您的正则表达式与您的值匹配。
作为替代方案,您可以使用:
这将断言行 ^
的开头,匹配单词字符 \w
(将匹配 [a-zA-Z0- 9_]
) 或字符类 [\w-]
中的连字符。
然后重复匹配点的模式和字符类中允许的字符 (?:\.[\w-]+)*
直到行尾 $
const strings = [
"a.b.c",
"A.b.c",
"a0.b_.c",
"a.bca._cda.dca-fb",
"0a.b.c",
"a.b.c.d."
];
let pattern = /^[a-z][\w-]*(?:\.[\w-]+)*$/i;
strings.forEach((s) => {
console.log(s + " ==> " + pattern.test(s));
});
如果匹配不应该以数字开头,但可以以下划线或连字符开头,您可以使用:
关于javascript - 正则表达式匹配由点分隔的字符串,只能包含字母数字、连字符、下划线、点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51104269/