首页 > 解决方案 > 字母数字单词的正则表达式以字母开头

问题描述

我需要从字符串中查找并返回模式的第一次出现。

示例:请找到我的型号 RT21M6211SR/SS 并保存

预期输出:RT21M6211SR/SS

模式匹配的条件

  1. 数字和字母的组合
  2. 字符长度在 6 到 14 之间
  3. 可能包含也可能不包含特殊字符,例如“-”或“/”
  4. 总是以字母开头

我试过了,但它不适用于第四个条件

var str = 'Please find my model number RT21M6211SR/SS and save it';
var reg = /\b(\w|\d)[\d|\w-\/]{6,14}\b/;
var extractedMNO = '';
var mg = str.match(reg) || [""];
console.log('regular match mno', mg[0]);

标签: javascriptregex

解决方案


\w匹配单词字符,其中也包括_和 数字。如果只想匹配字母字符,请使用[a-z]匹配第一个字符。

另外,因为要匹配 6-14 的长度,所以在匹配完第一个字符后,应该用 重复字符集{5,13},这样重复的字符加上第一个字符就可以得到 6-14 个字符的长度。

var str = 'Please find my model number RT21M6211SR/SS and save it';
console.log(str.match(/\b[a-z][a-z0-9\/-]{5,13}/gi)[2]);

但是由于匹配的字符串必须包含数字(并且不仅允许数字),因此您需要确保匹配的子字符串中也存在一个数字,您可以通过在匹配字母后立即对数字使用前瞻来完成开始:

var str = 'Please find my model number RT21M6211SR/SS and save it';
console.log(str.match(/\b[a-z](?=[a-z\/-]{0,12}[0-9])[a-z0-9\/-]{5,13}/gi));
//                            ^^^^^^^^^^^^^^^^^^^^^^^

如果您想允许其他特殊字符,只需将它们添加到字符集中。


推荐阅读