繁体   English   中英

正则表达式,用于接受数字,字母和特殊字符

[英]Regexp for accept numbers, letters and special characters

NKA-198,HM-1-0022,SCIDG 133

想要上述代码的正则表达式。 如何接受这些代码并将其分配给变量?

请建议我,并提前致谢。

首先确保你有你要匹配的字符串的一般结构有深刻的理解-例如,它分隔符号将是允许的(你的例子表明- SPC ,但对于+ ?你想匹配NKA 198SCIDG-133也是吗?

作为进一步完善的基础,请使用以下代码片段:

var orig = "some string containing ids like 'NKA-198' and 'SCIDG 133'";
var first_id = orig.replace(/^.*?([A-Z]+([ -][0-9]+)+).*/, "$1");
var last_id = orig.replace(/(?:.*[^A-Z]|^)([A-Z]+([ -][0-9]+)+).*/, "$1");

说明

  • 核心( ([AZ]+([ -][0-9]+)+)

    匹配任何大写字母序列,后跟一个数字序列,后跟一个连字符或空格字符。 序列“空格或连字符加数字”可以任意重复,但至少重复一次。 该规范可能过于严格或过于宽松,这就是为什么您必须查找/猜测要遵循的ID的一般规则的原因。 从严格意义上讲,您一直在要求的正则表达式是^(NKA-198|HM-1-0022| SCIDG 133)$ ,这当然不是您所需要的。

    最外面的括号将匹配项定义为第一个捕获组,从而允许在replace method中将匹配的内容引用为$1 使用replace还要求您的正则表达式需要匹配整个原始字符串。

  • 附加零件/第一个正则表达式

    从字符串的开头开始,非贪婪地匹配任何内容。 非贪心运算符( .*? )确保找到最短的匹配项,该匹配项仍允许完整模式的匹配项(查看如果删除问号会发生什么情况)。 这样您将在first_id得到第一个匹配的ID。

  • 附加零件/第二个正则表达式

    贪婪地匹配(=尽可能多),直到标识符模式匹配。 因此,您将获得最后一场比赛。 否定的字符类( [^AZ] )是必需的,因为您没有关于所讨论的ID的结构的进一步信息,特别是哪个/多少个大写字母。 该类确保匹配的ID开头之前的最后一个字符不是大写字符。 交替中的^满足orig以可匹配的ID开头的特殊情况-在这种情况下,否定的char类将不匹配,因为在匹配之前没有“最后一个前缀字符”。

参考

可以在此处找到有关regexp模式和用法的更详细(更胜任)的解释。 MDN在javascript中提供有关正则表达式用法的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM