Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex使用特定分隔符JavaScript从字符串中提取部分_Javascript_Regex - Fatal编程技术网

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" }

不要气馁,再试一次!不要气馁,再试一次!