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
来动态地创建自己
如果我在…中放置一个staticRegExp
,它工作得非常好
演示无法正常工作
演示非常完美,但我必须强制正则表达式知道要查找什么
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')