如何编写正则表达式来检查 javascript 中有效的 XML 元素 NCName?

How to write a regex expression to check a valid XML element NCName in javascript?

NCNam表示必须以字母或下划线开头,只能包含字母、数字、下划线、连字符,periods.I试过这样写regex,不过我觉得可能是错了。

if(/^([_]|[a-zA-Z]+[\w\W])$/.test('abc' ))  console.log('match')

您的 ^([_]|[a-zA-Z]+[\w\W])$ 模式匹配的字符串等于 _ ([_]) 或 (|) 由 1+ 个字母组成 ([a-zA-Z]+) 后跟任何字符 ([\w\W])。因此,它无法验证您提到的类型的字符串。

您可以使用

/^[a-zA-Z_][\w.-]*$/

参见下面的 regex demo and the graph (source):

详情

  • ^ - 字符串开头
  • [a-zA-Z_] - 一个字母或 _
  • [\w.-]* - 0 个或多个字母、数字、下划线、点或连字符
  • $ - 字符串结尾

must start with a letter or underscore

匹配第一个字符[a-z_]

and can only contain letters, digits, underscores, hyphens, and periods

使用包含所有这些的字符 class。注意,字母、数字、下划线一起构成了"word character"的表示,所以可以用\w代替单独写出来

完整:

/^[a-z_][\w.-]*$/i