javascript 数字不能跟在字符后面

knsnq2tg  于 2022-12-17  发布在  Java
关注(0)|答案(2)|浏览(130)

我正在尝试匹配字符后面不能跟数字的字符串
例如,这些项应全部匹配:

  • abc-123
  • 123-abc
  • 小行星123-abc-123
  • abc-123-abc

不匹配:

  • abc123
  • 123abc
  • ABC1
  • a1b2

请帮我找一个javascript正则表达式。

0pizxfdo

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方法返回一个布尔值,指示字符串是否与模式匹配。

已编辑,因为问题发生了变化(我仍然不确定是否正确)。

cuxqih21

cuxqih212#

假设有以下要求:

    • 交替 * 使用连字符分隔的字母和数字
  • 不得以连字符开头或结尾,例如:abc-123- * 无效 *
  • 如果没有连字符,则只有字母或数字:abc123 * 有效 *

通过匹配序列并使所有内容可选。 > regex101 demo

^\b\d*(?:\b-?[a-z]+-\d+)*-?\b[a-z]*$

或者使用lookaheads来禁止\d-\d[a-z]-[a-z]。 > regex101 demo

^(?:\d+-?\b(?!\d)|[a-z]+-?\b(?![a-z]))+$

在这两种变体中,word boundary之间需要可选连字符。
使用i-旗标(* 忽略大小写 *)来允许使用大写字母。让[a-z]符合[a-zA-Z]

相关问题