Javascript 字母数字字的正则表达式

Javascript 字母数字字的正则表达式,javascript,regex,Javascript,Regex,我需要从字符串中查找并返回模式的第一个匹配项 示例:您好,我的SNO是05FK3NEK900058V,请添加它 预期输出:05FK3NEK900058V 模式匹配的条件 数字和字母的组合 字符长度介于12到16之间 我可以使用正则表达式吗?还是需要循环使用单词 我试过了,但没用 const regex = /\b^(?!\d*$|[a-zA-Z]*$)[a-zA-Z\d]{12,16}$\b/gm; const str = `hello my SNO is 05FK3NEK900058V ple

我需要从字符串中查找并返回模式的第一个匹配项

示例:您好,我的SNO是05FK3NEK900058V,请添加它

预期输出:05FK3NEK900058V

模式匹配的条件

  • 数字和字母的组合
  • 字符长度介于12到16之间
  • 我可以使用正则表达式吗?还是需要循环使用单词

    我试过了,但没用

    const regex = /\b^(?!\d*$|[a-zA-Z]*$)[a-zA-Z\d]{12,16}$\b/gm;
    const str = `hello my SNO is 05FK3NEK900058V please add it `;
    let m;
    
    while ((m = regex.exec(str)) !== null) {
        // This is necessary to avoid infinite loops with zero-width matches
        if (m.index === regex.lastIndex) {
            regex.lastIndex++;
        }
    
        // The result can be accessed through the `m`-variable.
        m.forEach((match, groupIndex) => {
            console.log(`Found match, group ${groupIndex}: ${match}`);
        });
    }
    

    您可以使用单个正则表达式,如

    /\b(?=[a-zA-Z\d]{12,16}\b)(?:[a-zA-Z]*\d|\d*[a-zA-Z])[a-zA-Z\d]*\b/
    

    详细信息

    • \b
      -单词边界
    • (?=[a-zA-Z\d]{12,16}\b)
      -到下一个单词边界,必须有12到16个字母数字字符
    • (?:[a-zA-Z]*\d |\d*[a-zA-Z])
      -0+字母加数字或0+数字加字母
    • [a-zA-Z\d]*
      -0+字母数字字符
    • \b
      -单词边界
    请参见下面的JS演示:

    var str=“你好,我的SNO是05FK3NEK900058V,请添加它”;
    var reg=/\b(?=[a-zA-Z\d]{12,16}\b)(?:[a-zA-Z]*\d |\d*[a-zA-Z])[a-zA-Z\d]*\b/;
    var m=str.match(reg)| |[“”];
    
    console.log(m[0])

    我认为这会起作用:

    \w{12,16}
    

    此外,如果符合单词的要求,也可以使用单词边界

    \b\w{12,16}\b
    

    @PeterM评论后更新:

    最后一个版本更详细但更准确:

    string=`Johannsonoff 111111111111 05FK3NEK900058Vf 05FK3NEK900058Vfaf48你好,我的SNO是fFK3NEK9000515 05FK3NEK9000515请添加它05fk3nek900058vfaffasf1654 ek900058vs11 ek90005fk3nek900058vs16 05fk3nek900058vs17`;
    //返回一个数组,其中元素是12到16个字符之间的字符串。
    const groupMathed=string.match(/\b\w{12,16}\b/g)
    //返回数字[0-9]后跟字母字符或字母字符后跟数字的第一个元素。
    常量alphanumericWord=groupMathed.find(e=>/[0-9]+[a-zA-z]+|[a-zA-z]+[0-9]+/.test(e))
    console.log(字母数字字)
    let str=“你好(加上一些长词)我的SNO是05FK3NEK900058V请添加它”;
    常量reg=/\b[\w\d]{12,16}\b/g;
    设m=str.match(reg);
    if(类型m==“对象”&&m.length){
    对于(var indexM=0;indexM//05FK3NEK900058V
    这很好,但也会匹配长名称,例如:You was right@PeterM。我更新了我的答案。感谢您检测该问题。@Pablo感谢您的回答,一个小问题它只匹配数字字符串ie字符串='111111111111'而不是alphanumeric@Dibish我在“上一个版本更详细但更准确:”中更新了代码以修复该问题。感谢您检测并报告此问题。您是对的@bobble buble!我会测试和更新它!