Javascript 正则表达式匹配cookie值并删除连字符
我试图从一个较大的字符串/cookie中提取出一组单词,这些字符串/cookie由连字符分隔。我想用空格替换连字符并设置为变量。Javascript或jQuery 例如,较大的字符串中有如下名称和值:Javascript 正则表达式匹配cookie值并删除连字符,javascript,jquery,regex,cookies,match,Javascript,Jquery,Regex,Cookies,Match,我试图从一个较大的字符串/cookie中提取出一组单词,这些字符串/cookie由连字符分隔。我想用空格替换连字符并设置为变量。Javascript或jQuery 例如,较大的字符串中有如下名称和值: facility=34222%7CConner-Department-Store; (注意前面的“C”) 首先,我需要匹配()/find facility=34222%7CConner百货公司;用正则表达式。然后将其细分为“康纳百货公司” var cookie=document.cookie;
facility=34222%7CConner-Department-Store;
(注意前面的“C”)
首先,我需要匹配()/find facility=34222%7CConner百货公司;用正则表达式。然后将其细分为“康纳百货公司”
var cookie=document.cookie;
var facilityValue=cookie.match(REGEX)
var test=“store=874635%7Csomethingelse;facility=34222%7CConner百货公司;store=874635%7Csomethingelse;”;
var test2=test.replace(/^(.*)facility=([^;]+)(.*)$/,函数(matchedString,match1,match2,match3){
返回组件(匹配2);
});
log(test2);
log(test2.split(“|”)[1]。替换(/[-]/g,”)代码>您可以使用来自MDN(Mozilla开发者网络)的迷你框架
只需在应用程序中包含cookies.js文件,然后编写:
docCookies.getItem(“康纳百货公司”)代码>如果我理解正确,您希望通过获取连字符之间的所有单词并禁止一个单词中两个连续的大写字母来生成一个短语,因此我更喜欢在这种情况下使用正则表达式
这是一个正则表达式解决方案,它可以动态处理相同格式的任何cookie,并从中提取想要的句子:
var matches = str.match(/([A-Z][a-z]+)-?/g);
console.log(matches.map(function(m) {
return m.replace('-', '');
}).join(" "));
演示:
var str=“facility=34222%7CConner百货公司;”;
变量匹配=str.match(/([A-Z][A-Z]+)-?/g);
console.log(matches.map)(函数(m){
返回m.replace('-','');
}).加入(“”)代码>好,
首先,您应该按如下方式解码此字符串:
var str = "facility=34222%7CConner-Department-Store;"
var decoded = decodeURIComponent(str);
// decoded = "facility=34222|Conner-Department-Store;"
然后,您有多种可能拆分此字符串。
最简单的方法是使用substring()
var solution1=decoded.substring(decoded.indexOf(“|”)+1,decoded.length)
//solution1=“康纳百货公司
解决方案1=解决方案1.替换('-','');
//solution1=“康纳百货公司;”
如您所见,substring(arg1,arg2)
返回字符串,从索引arg1
开始,到索引arg2
结束。请参阅完整文档
如果要剪切最后一个
只需在上面的代码片段中将decoded.length-1
设置为arg2
decoded.substring(decoded.indexOf('|') + 1, decoded.length - 1)
//returns "Conner-Department-Store"
- 或仅在一行中列出以上所有内容:
decoded.substring(decoded.indexOf('|')+1,decoded.length-1)。替换('-','')
如果仍然希望使用正则表达式从字符串中检索(可能更多)数据,可以使用类似于以下代码段的内容:
var solution2 = "";
var regEx= /([A-Za-z]*)=([0-9]*)\|(\S[^:\/?#\[\]\@\;\,']*)/;
if (regEx.test(decoded)) {
solution2 = decoded.match(regEx);
/* returns
[0:"facility=34222|Conner-Department-Store",
1:"facility",
2:"34222",
3:"Conner-Department-Store",
index:0,
input:"facility=34222|Conner-Department-Store;"
length:4] */
solution2 = solution2[3].replace('-', ' ');
// "Conner Department Store"
}
我已经为正则表达式应用了一些规则,请根据您的需要随意修改它们。
facility
可以是任何长度的字母大小写(无其他字符)的单词
=
必须是字符=
34222
可以是任何数字,但不能是其他字符
|
必须是字符|
Conner Department Store
可以是除以下一个(保留分隔符)之外的任何字符::/?#[];,'代码>
希望这有帮助:)
编辑:仅查找零件
facility=34222%7CConner百货公司代码>只需将正则表达式修改为
匹配facility=
而不是([A-z]*)=
:
/(facility)=([0-9]*)\\\(\S[^:\/?\[\]\@\\,']*)/
OPs的问题不是获取cookies,而是获取值和解析it@CarlMarkhamOP留下评论说他需要它。我没有投反对票,但严格来说你保留了分号。我需要首先提取facility=34222%7CConner百货公司;从一根更大的绳子/cookie@Mike看看我的答案。不过,您的问题中没有明确要求提取cookie。@LincolnBergeson抱歉,我将更新问题。我不想为此使用第三方插件,但感谢您的建议。您为什么不直接使用返回decodeURIComponent(match2)设置test2
代码>从替换功能<代码>var test2=test.replace(…)代码>您将如何将C
和Conner
分开此外,上面的字符串代表您试图解决的每一个案例(可以假定您始终在查找从%7C
之后到行尾的值)@chsdk%7C
是URL编码的管道,无需区分,我想你可以在正则表达式中不允许两个连续的大写字母。。只是想一想。首先用decodeURIComponent(string)
解码字符串,它返回以下内容:“facility=34222 | Conner Department Store;”
然后您可以根据需要修改字符串。例如,应用子字符串(…)或拆分(“|”)