Javascript 正则表达式检查不同的订购?
我试图写出一个正则表达式,检查是否已写入以下内容:Javascript 正则表达式检查不同的订购?,javascript,regex,Javascript,Regex,我试图写出一个正则表达式,检查是否已写入以下内容: 会话({ 秘密:“asdfadf”, resave:false, saveUninitialized:false, }); 我写的正则表达式测试: 我需要更新它,这样属性可以按不同的顺序添加,并且仍然通过正则表达式测试。是否有一个组或一种方法来设置它以使其通过?如果我们想要创建一个正则表达式来匹配由子字符串组成的字符串 Doe Ray Me Far Sew La Tea 在任何顺序中,我们都不想乏味地创建一个非常长的表达式,包括所有可能的顺序
会话({
秘密:“asdfadf”,
resave:false,
saveUninitialized:false,
});
我写的正则表达式测试:
我需要更新它,这样属性可以按不同的顺序添加,并且仍然通过正则表达式测试。是否有一个组或一种方法来设置它以使其通过?如果我们想要创建一个正则表达式来匹配由子字符串组成的字符串
Doe Ray Me Far Sew La Tea
在任何顺序中,我们都不想乏味地创建一个非常长的表达式,包括所有可能的顺序,我们可以从尝试开始
(Doe | Ray | Me | Far | Sew | La | Tea){7}
它与包含七个子字符串的任意顺序的字符串相匹配
然后,如果一个或多个子字符串重复或丢失,则表达式不会不匹配
确保每个子字符串只出现一次的一种方法是为每个备选项添加一个负的前瞻性,以确保它不会在匹配之前再次出现在字符串中
(Doe(?。*D)| Ray(?。*R)| Me(?。*M)| Far(?。*F)| Sew(?。*S)| La(?。*L)| Tea(?。*T){7}
请注意,前瞻中只需要子字符串的第一个字母,因为每个子字符串的第一个字母不同
在您的特定情况下,以下内容似乎可以正常工作,尽管尚未经过彻底测试
最后一个尾随逗号由(,|(?=\s*\}))
设置为可选,这确保如果没有逗号,则在可选空格后的字符串前面必须有一个'}
您可能不希望像这里所做的那样使分号成为可选的
你也可以这样做
const input=`session({
秘密:“asdfadf”,
resave:false,
saveUninitialized:false,
});`;
const regex=/^session\s*(\s*{\s*((secret\s*:\s*(?[“'))\w*\k(?).resave\s*:\s*false(?)。*e\s*:)\s*:\s*false(?。*d\s*:)\s*(,\124;(?=\ s*))\s*)\s*){3}\s*)\s*;
console.log(regex.test(input));
如果我们想创建一个正则表达式来匹配由子字符串组成的字符串
Doe Ray Me Far Sew La Tea
在任何顺序中,我们都不想乏味地创建一个非常长的表达式,包括所有可能的顺序,我们可以从尝试开始
(Doe | Ray | Me | Far | Sew | La | Tea){7}
它与包含七个子字符串的任意顺序的字符串相匹配
然后,如果一个或多个子字符串重复或丢失,则表达式不会不匹配
确保每个子字符串只出现一次的一种方法是为每个备选项添加一个负的前瞻性,以确保它不会在匹配之前再次出现在字符串中
(Doe(?。*D)| Ray(?。*R)| Me(?。*M)| Far(?。*F)| Sew(?。*S)| La(?。*L)| Tea(?。*T){7}
请注意,前瞻中只需要子字符串的第一个字母,因为每个子字符串的第一个字母不同
在您的特定情况下,以下内容似乎可以正常工作,尽管尚未经过彻底测试
最后一个尾随逗号由(,|(?=\s*\}))
设置为可选,这确保如果没有逗号,则在可选空格后的字符串前面必须有一个'}
您可能不希望像这里所做的那样使分号成为可选的
你也可以这样做
const input=`session({
秘密:“asdfadf”,
resave:false,
saveUninitialized:false,
});`;
const regex=/^session\s*(\s*{\s*((secret\s*:\s*(?[“'))\w*\k(?).resave\s*:\s*false(?)。*e\s*:)\s*:\s*false(?。*d\s*:)\s*(,\124;(?=\ s*))\s*)\s*){3}\s*)\s*;
console.log(regex.test(输入))代码>我需要更新它
,更新它是什么意思?您到底想要实现什么?当前正则表达式检查会话对象中的属性是否存在,但如果有人以不同的顺序添加它们,则会失败。例如,如果有人在secret
之前添加resave
,则正则表达式测试失败。为什么需要检查此项?对象传递给会话的选项应该是无关的。是的,只是这三个选项按任何顺序排列。这太可怕了,我敦促您重新考虑。否则,您可能会考虑创建6个替换的蛮力方法<代码>(MatCH1)(MatCH2)< /代码>等。为了涵盖3个项目的可能排列。我需要更新它
,更新它是什么意思?您到底想要实现什么?当前正则表达式检查会话对象中的属性是否存在,但如果有人以不同的顺序添加它们,则会失败。例如,如果有人在secret
之前添加resave
,则正则表达式测试失败。为什么需要检查此项?对象传递给会话的选项应该是无关的。是的,只是这三个选项按任何顺序排列。这太可怕了,我敦促您重新考虑。否则,您可能会考虑创建6个替换的蛮力方法<代码>(MatCH1)(MatCH2)< /代码>等。涵盖3个项目的可能排列。
session\(\{\s*secret\:\s*("|')\w*("|')\s*,\s*resave\s*\:\s*false\,\s*saveUninitialized\:\s*false\,?\s*\}\)