javascript - 接受数字、字母和特殊字符的正则表达式

标签 javascript

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");

说明

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

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

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

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

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

  • 附加部分/第二个正则表达式

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

引用文献

有关正则表达式模式和用法的更详细(更有效)的解释可以在 here 中找到。 。 MDN提供有关 JavaScript 中正则表达式用法的信息。

关于javascript - 接受数字、字母和特殊字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744166/

相关文章:

javascript - 第一次悬停时未显示 ajax 调用后附加到标题标签的数据

javascript - Angular JS 错误 - http ://errors. angularjs.org/1.5.0/$injector/unpr?p0

javascript - 函数在 Chrome 中运行但在 Firefox 中不运行说函数未定义

javascript - 默认情况下突出显示的选项卡

javascript - 如何使用 Javascript Cropper 修复发布到服务器的图像大小

javascript - 将默认值分配给页面加载时加载的 .click 函数

javascript - 使用 jquery text() 获取 br 之间的文本值

javascript - 根据选中的 html 复选框设置 java 字符串变量值

javascript - 使用 javascript 和 jquery 在某个符号后更改格式

javascript - 为什么我的 json 数据没有使用 javascript 按正确的顺序加载?