繁体   English   中英

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

[英]Regex to get extract parts from String with specific separator, 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或任何其他组合。

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

尝试将.match()RegExp /:(\\w{2})/g匹配:紧随其后的是两个字母数字字符, .map()将从.match()String.prototype.slice()返回的结果迭代删除:从结果, .split()RegExp /\\[:\\w{2}\\]|\\[:\\]|:\\w{2}/删除[]字符和匹配:后跟两个字母数字字符,以Boolean为参数的.filter().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)) 

使用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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects /字符串/分割

您可以尝试使用此正则表达式来捕获一组括号内的内容,而另一组捕获括号内的一组单词。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM