2016-02-26 28 views
0

我有例如字符串:正则表达式从字符串与特定的分离获得提取部分,JavaScript的

[: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或任何其他组合。

我试图为此编写正则表达式,但是我失败了。

+0

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

回答

0

你可以试试这个正则表达式来捕获一个组中的内容,一对括号内的内容和另一个组中的括号内的单词组。

(\[.*?\])(\w+)

2

尝试使用.match()RegExp/:(\w{2})/g匹配:后跟两个字母数字字符,.map()迭代结果从.match()String.prototype.slice()返回到除去:从结果,.split()RegExp/\[:\w{2}\]|\[:\]|:\w{2}/以除去[]字符和匹配:后跟两个字母数字字符,.filter()Boolean作为参数,以从返回的数组中删除空字符串通过.split(),使用.map()index设置对象的值,则返回对象

var str = "[:pl]Field_value_in_PL[:en]Field_value_in_EN[:]:deField_value_in_DE"; 
 

 
var props = str.match(/:(\w{2})/g).map(function(val, index) { 
 
    var obj = {} 
 
    , prop = val.slice(1) 
 
    ,vals = str.split(/\[:\w{2}\]|\[:\]|:\w{2}/).filter(Boolean); 
 
    obj[prop] = vals[index]; 
 
    return obj 
 
}); 
 

 
console.log(JSON.stringify(props, null, 2))

1

String.replaceString.splitArray.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" } 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

相关问题