Regex使用特定分隔符JavaScript从字符串中提取部分
我有一个字符串示例:Regex使用特定分隔符JavaScript从字符串中提取部分,javascript,regex,Javascript,Regex,我有一个字符串示例: [:pl]Field_value_in_PL[:en]Field_value_in_EN[:] 我想得到类似的东西: Object { pl: "Field_value_in_PL", en: "Field_value_in_EN" } 但我不能假设输入字符串中总是有“[:pl]”和“[:en]”。只能通过:pl或:en、:de和:fr或任何其他组合进行设置 我尝试为此编写Regexp,但失败了。您可以尝试使用此regex在一组中捕获一对括号内的内容,在
[:pl]Field_value_in_PL[:en]Field_value_in_EN[:]
我想得到类似的东西:
Object {
pl: "Field_value_in_PL",
en: "Field_value_in_EN"
}
但我不能假设输入字符串中总是有“[:pl]”和“[:en]”。只能通过:pl或:en、:de和:fr或任何其他组合进行设置
我尝试为此编写Regexp,但失败了。您可以尝试使用此regex在一组中捕获一对括号内的内容,在另一组中捕获括号后的一组单词
(\[.*?\])(\w+)
您可以尝试使用此正则表达式在一组中捕获一对括号内的内容,在另一组中捕获括号后的一组单词
(\[.*?\])(\w+)
尝试将.match()
与RegExp
/:(\w{2})/g
匹配:
后跟两个字母数字字符,.map()
迭代从.match()
返回的结果,字符串.prototype.slice()
从结果中删除,.split()
使用RegExp
/\[:\w{2}\]\[:\w{2}/删除[
,]
字符,并匹配:
后接两个字母数字字符,.filter()
使用布尔值作为参数,从.split()返回的数组中删除空字符串
,使用.map()
的索引,设置对象的值,返回对象
var str=“[:pl]字段中的值[:en]字段中的值[:DE]中的定义值];
var props=str.match(/:(\w{2})/g).map(函数(val,索引){
var obj={}
,prop=val.slice(1)
,vals=str.split(/\[:\w{2}\]\[:\]\\:\w{2}/).filter(布尔值);
obj[prop]=VAL[索引];
返回obj
});
console.log(JSON.stringify(props,null,2))
尝试将.match()
与RegExp
/:(\w{2})/g
匹配:
后跟两个字母数字字符,.map()
迭代从.match()
返回的结果,字符串.prototype.slice()
若要从结果中删除:
,请使用RegExp
/\[:\w{2}\]\\[:\w{2}/
删除[
,]
字符并匹配:
后接两个字母数字字符,.filter()
使用Boolean
作为参数,从.split()
返回的数组中删除空字符串,使用.map()
的索引来设置对象的值,返回对象
var str=“[:pl]字段中的值[:en]字段中的值[:DE]中的定义值];
var props=str.match(/:(\w{2})/g).map(函数(val,索引){
var obj={}
,prop=val.slice(1)
,vals=str.split(/\[:\w{2}\]\[:\]\\:\w{2}/).filter(布尔值);
obj[prop]=VAL[索引];
返回obj
});
console.log(JSON.stringify(props,null,2))
解决方案使用字符串。替换、字符串。拆分和数组。forEach
函数:
var str = "[:pl]Field_value_in_PL[:en]Field_value_in_EN[:fr]Field_value_in_FR[:de]Field_value_in_DE[:]",
obj = {},
fragment = "";
var matches = str.replace(/\[:(\w+?)\]([a-zA-Z_]+)/gi, "$1/$2|").split('|');
matches.forEach(function(v){ // iterating through key/value pairs
fragment = v.split("/");
if (fragment.length == 2) obj[fragment[0]] = fragment[1]; // making sure that we have a proper 'final' key/value pair
});
console.log(obj);
// the output:
Object { pl: "Field_value_in_PL", en: "Field_value_in_EN", fr: "Field_value_in_FR", de: "Field_value_in_DE" }
使用字符串的解决方案。替换,字符串。拆分和数组。forEach
函数:
var str = "[:pl]Field_value_in_PL[:en]Field_value_in_EN[:fr]Field_value_in_FR[:de]Field_value_in_DE[:]",
obj = {},
fragment = "";
var matches = str.replace(/\[:(\w+?)\]([a-zA-Z_]+)/gi, "$1/$2|").split('|');
matches.forEach(function(v){ // iterating through key/value pairs
fragment = v.split("/");
if (fragment.length == 2) obj[fragment[0]] = fragment[1]; // making sure that we have a proper 'final' key/value pair
});
console.log(obj);
// the output:
Object { pl: "Field_value_in_PL", en: "Field_value_in_EN", fr: "Field_value_in_FR", de: "Field_value_in_DE" }
不要气馁,再试一次!不要气馁,再试一次!