正则表达式使用特定的分隔符JavaScript从String中获取提取部分

时间:2016-02-26 17:56:10

标签: 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,但我失败了。

3 个答案:

答案 0 :(得分:2)

尝试使用.match()RegExp /:(\w{2})/g匹配:后跟两个字母数字字符.map()来迭代.match()返回的结果, String.prototype.slice()要从结果:移除.split()RegExp /\[:\w{2}\]|\[:\]|:\w{2}/ [删除]:字符并匹配{{1}接下来是两个字母数字字符.filter(),其中Boolean作为参数从.split()返回的数组中删除空字符串,使用index .map()来设置值对象,返回对象

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 :(得分: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

答案 2 :(得分:0)

您可以尝试使用此正则表达式在一个组中捕获一对括号内的内容,在另一组中捕获括号后面的单词组。

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