我正在尝试匹配字符后面不能跟数字的字符串例如,这些项应全部匹配:
不匹配:
请帮我找一个javascript正则表达式。
0pizxfdo1#
若要匹配仅包含由数字分隔的字母的字符串,可以使用以下正则表达式:
/^[a-zA-Z]+(?:-[a-zA-Z]+)*$/
此正则表达式将匹配以字母开头和结尾,中间有数字的字符串。字母和数字必须用连字符分隔。例如,可以使用以下代码测试此正则表达式:
const regex = /^[a-zA-Z]+(?:-[a-zA-Z]+)*$/; console.log(regex.test("abc-123")); // should return true console.log(regex.test("123-abc")); // should return true console.log(regex.test("123-abc-123")); // should return true console.log(regex.test("abc-123-abc")); // should return true console.log(regex.test("abc123")); // should return false console.log(regex.test("123abc")); // should return false console.log(regex.test("abc1")); // should return false console.log(regex.test("a1b2")); // should return false
此代码使用上述模式定义正则表达式,然后使用test方法检查各个字符串是否与模式匹配。test方法返回一个布尔值,指示字符串是否与模式匹配。
已编辑,因为问题发生了变化(我仍然不确定是否正确)。
cuxqih212#
假设有以下要求:
abc-123-
abc
123
通过匹配序列并使所有内容可选。 > regex101 demo
^\b\d*(?:\b-?[a-z]+-\d+)*-?\b[a-z]*$
或者使用lookaheads来禁止\d-\d或[a-z]-[a-z]。 > regex101 demo
\d-\d
[a-z]-[a-z]
^(?:\d+-?\b(?!\d)|[a-z]+-?\b(?![a-z]))+$
在这两种变体中,word boundary之间需要可选连字符。使用i-旗标(* 忽略大小写 *)来允许使用大写字母。让[a-z]符合[a-zA-Z]。
i
[a-z]
[a-zA-Z]
2条答案
按热度按时间0pizxfdo1#
若要匹配仅包含由数字分隔的字母的字符串,可以使用以下正则表达式:
此正则表达式将匹配以字母开头和结尾,中间有数字的字符串。字母和数字必须用连字符分隔。
例如,可以使用以下代码测试此正则表达式:
此代码使用上述模式定义正则表达式,然后使用test方法检查各个字符串是否与模式匹配。test方法返回一个布尔值,指示字符串是否与模式匹配。
已编辑,因为问题发生了变化(我仍然不确定是否正确)。
cuxqih212#
假设有以下要求:
abc-123-
* 无效 *abc
或123
* 有效 *通过匹配序列并使所有内容可选。 > regex101 demo
或者使用lookaheads来禁止
\d-\d
或[a-z]-[a-z]
。 > regex101 demo在这两种变体中,word boundary之间需要可选连字符。
使用
i
-旗标(* 忽略大小写 *)来允许使用大写字母。让[a-z]
符合[a-zA-Z]
。