Javascript 为什么新的正则表达式不能正常工作

Javascript 为什么新的正则表达式不能正常工作,javascript,Javascript,出于某种原因 当我试图从中获取对象.keys替换.letters并在新RegExp中使用对象.keys时,由加入 newregexp只识别一些Object.keys但不能识别所有这些键。我需要RegEx来动态地创建自己 如果我在…中放置一个staticRegExp,它工作得非常好 演示无法正常工作 演示非常完美,但我必须强制正则表达式知道要查找什么 replace={ 信件:{ a:{ 之后:[“til”] }, b:{ 因为:[“bec”] }, c:{ 酷:[“冷”] }, e:{ 能量:

出于某种原因

当我试图从
中获取
对象.keys
替换.letters
并在
新RegExp中使用
对象.keys
时,由
加入

newregexp
只识别一些
Object.keys
但不能识别所有这些键。我需要
RegEx
来动态地创建自己

如果我在…中放置一个static
RegExp
,它工作得非常好

  • 演示无法正常工作

  • 演示非常完美
    ,但我必须强制正则表达式知道要查找什么

  • replace={
    信件:{
    a:{
    之后:[“til”]
    },
    b:{
    因为:[“bec”]
    },
    c:{
    酷:[“冷”]
    },
    e:{
    能量:[“en”]
    },
    h:{
    灯光:[“看”]
    },
    一:{
    基恩:[“好”]
    },
    r:{
    摇滚乐:[“摇滚乐”]
    },
    s:{
    发货:[“跳过”]
    },
    t:{
    行程:[“提示”]
    }
    }
    }
    句子=[
    “如果你想吃饼干,就吃晚饭。”,
    “你一进屋就换衣服,打扫房间,拖地板。”,
    “只要我是国王,我就保证你的安全。”,
    “房子油漆好后,换窗帘。”,
    “在我们出发之前,把窗帘换了。”,
    “假设你是个好人,拿着我的啤酒。”,
    “拒绝这个提议,即使我不在那里。”,
    “拒绝这个提议,zoom,我不在那里。”,
    “等车到了,演出就结束了。”,
    “选择一个随机数。”,
    “尽量不要把这个、那个和那个搞砸。”,
    “改变一个随机数,选择一种颜色,然后把它放在杰森的房子里。”,
    “缩放、固定并降低杆。”,
    “不要换房子。”,
    “创建一个游乐场。”,
    “你不在的时候,我换了锁”,
    “在我停车之前,你能帮我拿一下钱包吗?”
    ]
    让objects_letters=Object.key(replace.letters).join(“|”)
    让字母\正则表达式=新正则表达式('^('+对象\字母+'),'gi')
    console.log(letters\u RegEx)//这不能正常工作。
    for(变量i=0;i<句子长度;i++){
    让$this=句子[i]
    让commaKey=/,/g.test($this)
    让if|While_Key=/^(if|While)/gi.test($this)
    //问题就在这里
    let letterKey=字母\正则表达式测试($this)
    //问题就在这里
    if(commaKey){
    if(if_While_Key){}
    如果(字母键){
    $('body')。追加($this+'
    '); }else{} }else{} }

    当包含在字符串()中时,必须在特殊字符前面加\

    编辑:似乎需要转义regexp中的所有特殊字符。我从中借用了
    escapeRegExp
    函数

    请参阅下面更正的代码段:

    replace={
    信件:{
    a:{
    之后:[“til”]
    },
    b:{
    因为:[“bec”]
    },
    c:{
    酷:[“冷”]
    },
    e:{
    能量:[“en”]
    },
    h:{
    灯光:[“看”]
    },
    一:{
    基恩:[“好”]
    },
    r:{
    摇滚乐:[“摇滚乐”]
    },
    s:{
    发货:[“跳过”]
    },
    t:{
    行程:[“提示”]
    }
    }
    }
    句子=[
    “如果你想吃饼干,就吃晚饭。”,
    “你一进屋就换衣服,打扫房间,拖地板。”,
    “只要我是国王,我就保证你的安全。”,
    “房子油漆好后,换窗帘。”,
    “在我们出发之前,把窗帘换了。”,
    “假设你是个好人,拿着我的啤酒。”,
    “拒绝这个提议,即使我不在那里。”,
    “拒绝这个提议,zoom,我不在那里。”,
    “等车到了,演出就结束了。”,
    “选择一个随机数。”,
    “尽量不要把这个、那个和那个搞砸。”,
    “改变一个随机数,选择一种颜色,然后把它放在杰森的房子里。”,
    “缩放、固定并降低杆。”,
    “不要换房子。”,
    “创建一个游乐场。”,
    “你不在的时候,我换了锁”,
    “在我停车之前,你能帮我拿一下钱包吗?”
    ]
    让objects\u letters=Object.keys(replace.letters.join(“\\\”)
    让letters_RegEx=new RegExp(escapeRegExp('^('+objects_letters+')),'i')
    控制台日志(字母_RegEx);
    函数escapeRegExp(文本){
    返回text.replace(/[-[\]{}()*+?,\\^$\\s]/g,\$&');
    }
    for(变量i=0;i<句子长度;i++){
    让$this=句子[i]
    让commaKey=/,/g.test($this)
    让if|While_Key=/^(if|While)/gi.test($this)
    //固定的
    let letterKey=letters\u RegEx.exec($this)
    if(commaKey){
    if(if_While_Key){}
    如果(字母键){
    $('body')。追加($this+'
    '); }else{} }else{} }

    您的问题是您的
    RegExp标志

    改变

    let letters_RegEx = new RegExp('^(' + objects_letters + ')', 'gi')
    


    replace={
    信件:{
    a:{
    之后:[“til”]
    },
    b:{
    因为:[“bec”]
    },
    c:{
    酷:[“冷”]
    },
    e:{
    能量:[“en”]
    },
    h:{
    灯光:[“看”]
    },
    一:{
    基恩:[“好”]
    },
    r:{
    摇滚乐:[“摇滚乐”]
    },
    s:{
    发货:[“跳过”]
    },
    t:{
    行程:[“提示”]
    }
    }
    }
    句子=[
    “如果你想吃饼干,就吃晚饭。”,
    “你一进屋就换衣服,打扫房间,拖地板。”,
    “只要我是国王,我就保证你的安全。”,
    “房子油漆好后,换窗帘。”,
    “在我们出发之前,把窗帘换了。”,
    “假设你是个好人,拿着我的啤酒。”,
    “拒绝这个提议,即使我不在那里。”,
    “拒绝这个提议,zoom,我不在那里。”,
    “等车到了,演出就结束了。”,
    “选择一个随机数。”,
    “尽量不要把这个、那个和那个搞砸。”,
    “改变一个随机数,选择一种颜色,然后把它放在杰森的房子里。”,
    “缩放、固定并降低杆。”,
    “不要换房子。”,
    “创建一个游乐场。”,
    “你不在的时候,我换了锁”,
    “在我停车之前,你能帮我拿一下钱包吗?”
    ]
    让objects_letters=Object.key(replace.letters).join(“|”)
    让字母\正则表达式=新正则表达式('^('+对象\字母+')”
    
    let letters_RegEx = new RegExp('^(' + objects_letters + ')', 'i')