我有一个看起来像这样的字符串:
"test-file" : "abc.xml","test2-file":"abcd.xml","test3-file":"bcde.xml","test-file" : "def.xml"'
我该如何创建一个输出如下数组的正则表达式:
{abc.xml, def.xml} or {"test-file" : "abc.xml","test-file" : "def.xml"}
仅与 ':'
之前的测试文件配对。
我尝试过:
json.match(/"test-file" : "(.*)\.xml"/);
但是我得到输出:
0:“ \”测试文件\“:\” abc.xml \“,\” test2-file \“:\” abcd.xml \“,\” test3-file \“:\” bcde。 xml \“,\” test-file \“:\” def.xml \“”
1:“ abc.xml \”,\“ test2-file \”:\“ abcd.xml \”,\“ test3-file \”:\“ bcde.xml \”,\“ test-file \”:\ “ def”
答案 0 :(得分:0)
将值存储在字符串中并使用拆分功能
示例:
test_string='"test-file" : "abc.xml","test2-file":"abcd.xml","test3-file":"bcde.xml","test-file" : "def.xml"';
test_string.split(",");
它将用,
拆分该字符串并将值存储在数组中。
答案 1 :(得分:0)
如果您要查找的所有键值对都是
您应该可以直接使用JSON。
我怀疑当您必须处理可变键名时,正则表达式是否会有所帮助。必须有一个标准,可以让您区分好键和坏键。
如果此标准是顺序,这是一个围绕Object.keys
构建的示例,用于在不知道键的实际名称的情况下访问值。但是,还有许多其他方法可以用来this。
// Function to get the nth key from the object
Object.prototype.getByIndex = function(index) {
return this[Object.keys(this)[index]];
};
var json = {
"config": {
"files": [{
"name1": "test.xml"},
{
"name2": "test2.xml"
}]
}
};
$.each(json.config.files, function(i, v) {
if (i !== 0) // or whatever is a "good" index
return;
//or if it is the content of the value the identifies a good value...
if (v.getByIndex(0).indexOf(".xml") !== -1) {
console.log(v);
return;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
如果您执行许多此类JSON查询操作,则JSONiq,JSPath或jsonpath之类的JSON查询语言/库可能是您的正确选择。
如果您的子字符串/关键字始终相同,则可以使用正则表达式,例如
const regex = /"test-file"\s*:\s*".*?\.xml"/g;
const str = `"test-file" : "abc.xml","test2-file":"abcd.xml","test3-file":"bcde.xml","test-file" : "def.xml"'`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}