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

时间:2015-04-20 09:35:49

标签: javascript

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

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

请建议我并提前致谢。

1 个答案:

答案 0 :(得分:1)

首先确保您对要匹配的字符串的一般结构有充分的了解 - 例如,允许使用哪些分隔符号(您的示例建议使用-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");

<强> 解释

  • 核心(([A-Z]+([ -][0-9]+)+)

    匹配任何大写字母序列,后跟一个前面带有单个连字符或空格字符的数字序列。序列&#39;空格或连字符加数字&#39;可以经常重复,但至少一次。此规范可能过于严格或过于宽松,这就是为什么您必须查找/猜测您希望匹配的ID的一般规则服从的原因。从严格意义上说,你所要求的正则表达式是^(NKA-198|HM-1-0022| SCIDG 133)$,这肯定不是你需要的。

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

  • 其他部分/第一个正则表达式

    从字符串的开头开始,非贪婪地匹配任何内容。非贪婪的运算符(.*?)确保找到尽可能短的匹配,但仍然允许匹配完整模式(如果丢弃问号,请查看会发生什么)。您最终会在first_id中找到第一个匹配的ID。

  • 其他部分/秒正则表达式

    贪婪地匹配(=尽可能多)直到标识符模式匹配。因此,你最终会得到最后一场比赛。否定的字符类([^A-Z])是必要的,因为您没有关于所讨论的ID结构的进一步信息,特别是有哪些/有多少首都字符。该类确保匹配id开头之前的最后一个字符不是大写字符。交替中的^迎合orig以匹配ID开头的特殊情况 - 在这种情况下,否定的char类将不匹配,因为没有&#39;最后一个前缀字符&# 39;比赛前。

<强> 参考

可以找到有关正则表达式模式和用法的更详细(且更有能力)的解释hereMDN提供有关javascript中正则表达式用法的信息。