数组上的正则表达式
Regular Expressions on array
我正在尝试编辑数组中的第一个条目,然后再将其放入另一个文件。
就是这样:
(["'"NAMES'":'"cs.js'"},[
我想把它变成这样:
([{"NAMES":"cs.js"},[
我正在使用在线正则表达式生成器,但到目前为止,我只设法使用/编辑到这一点。["['']/并替换为 ([{:
([{"NAMES'":'"cs.js'"},[
任何帮助将不胜感激。
编辑:
以下是一些代码:
var initialCourseArray = new Array()
initialCourseArray.push(["'"NAMES'":'"cs.js'"},[
{"COURSE_ID":"ENGL 1013"},
{"COURSE_ID":"FAH1"},
{"COURSE_ID":"USHG1"},
{"COURSE_ID":"TECH 1001"},
{"COURSE_ID":"COMS 1403"},
{"COURSE_ID":"COMS 1411"},
{"COURSE_ID":"ENGL 1023"},
{"COURSE_ID":"SS1"},
{"COURSE_ID":"MATH 2914"},
后面的东西是数组中的其余值,它们看起来不像这个,所以我不担心它们。
第二次编辑:
由于老实说,我应该首先放置在这里的代码存在一些混乱,因此我使用php文件从测试数据库中检索课程数据,然后将其编码为JSON,对其进行格式化,然后使用fopen和fprintf将其放置在javascript文件中。我给你的部分是最终在javascript文件中的内容。
第三次编辑:
这是我用来格式化数组的代码。这非常混乱,因为我的领导不断改变他希望结果的格式:
$row1 = "'"NAMES'"";
$colon = ":";
$row2 = "'"".$major.".js'"";
$major_name = $row1.$colon.$row2;
//The course data is already loaded into the table. This why I am using array_unshift to place the major_name inside.
array_unshift($major_array, $major_name);
array_push($major_array, "false");
$json_string = json_encode($major_array);
$re = "/.,/";
$subst = "},'r'n";
$json_string = preg_replace($re, $subst, $json_string);
$re2 = "/',(?=[^.]*$)/";
$subst2 = ",[";
$json_string = preg_replace($re2, $subst2, $json_string, 1);
$first_string = "var initialCourseArray = new Array()";
$second_string = "initialCourseArray.push(";
$end_bracket = "]";
$end_parentheses =")";
有几个问题:
1. 不要操作 JSON 字符串
您永远不应该操作作为json_encode
结果的字符串,因为您很可能会使 JSON 文本无效,这实际上发生在您的情况下。
所以使用这种语句:
$json_string = preg_replace($re, $subst, $json_string);
是在自找麻烦。一旦你有了$json_string
,它应该是最终的。你想在结构上发生的任何事情都必须在你打电话之前发生json_encode
。
即使您只想在 JSON 字符串中添加换行符,也不要这样做。 json_code
提供了一个"漂亮的打印"选项,可以为您完成:
json_encode(...., JSON_PRETTY_PRINT);
2. JavaScript 没有关联数组
第二个问题是,在 JavaScript 中,你不能有类似的东西
["NAMES":"cs.js" ...]
所以json_encode
永远不会产生这样的东西。如果你想要JavaScript中的命名键(如"NAMES"
),你不能将其定义为数组,而应将其定义为对象:
{"NAMES":"cs.js" ...}
如果您为它提供相应的 PHP 结构(即关联数组)并让它在不篡改的情况下完成其工作,json_encode
将为您执行此操作。
3. 不要添加"false"
将"false"
作为元素添加到课程数组中似乎没有用。在 JavaScript 中,您可以轻松检查数组中有多少元素,因此无需在末尾放置一种停止符号。
无论如何,如果在 JavaScript 中引用不存在的数组中的元素,则会得到 undefined
,您可以验证它,就像验证值"false"
一样。
我强烈建议不要这样做。
建议的代码
您在问题中提供的 PHP 代码可以替换为以下内容:
// Add the names element as a separate item next to the courses array,
// which we put in the "courses" property.
$major_array = array(
"names" => $major,
"courses" => $major_array
);
// Turn into JSON text with added line breaks and indentation:
$json_string = json_encode($major_array, JSON_PRETTY_PRINT);
// Don't touch the JSON text anymore, but output it:
echo "var initialCourse = $json_string;";
输出(JavaScript)将是这样的:
var initialCourse = {
"names": "cs",
"courses": [
{
"COURSE_ID": "ENGL 1013"
},
{
"COURSE_ID": "FAH1"
},
{
"COURSE_ID": "USHG1"
},
{
"COURSE_ID": "TECH 1001"
},
{
"COURSE_ID": "COMS 1403"
},
{
"COURSE_ID": "COMS 1411"
},
{
"COURSE_ID": "ENGL 1023"
},
{
"COURSE_ID": "SS1"
},
{
"COURSE_ID": "MATH 2914"
}
]
};
正如我上面提到的,这是一个对象结构,而不是数组结构,因为 JavaScript 不允许数组表示法中的命名键。如果在 JavaScript 中你需要迭代上述结构中的课程,你可以解决 courses
属性(它是一个数组),如下所示:
for (var course of initialCourse.courses) {
console.log('course id: ' + course.COURSE_ID);
}
结构更简洁
我必须说,只有一个属性的对象有点矫枉过正。这种结构将更加简洁和高效:
var initialCourse = {
"names": "cs",
"courses": [
"ENGL 1013",
"FAH1",
"USHG1",
"TECH 1001",
"COMS 1403",
"COMS 1411",
"ENGL 1023",
"SS1",
"MATH 2914"
]
};
在 JavaScript 中,你可以像这样迭代这些课程:
for (var course of initialCourse.courses) {
console.log('course id: ' + course);
}
如果您对此感兴趣,您应该在我上面建议的任何 PHP 代码之前将这一行添加到您的 PHP 代码中:
$major_array = array_map(function ($course) { return $course["COURSE_ID"]; }, $major_array);
如果您只想将其应用于该行,
找到/"?''"/
并替换"
就可以了。
- javascript无效正则表达式无效组
- Nodejs 可选正则表达式命名组的插件或代码片段
- 使用 javascript 拆分时忽略正则表达式捕获组
- 在数组中存储 JS 正则表达式捕获组的最佳方法
- 正则表达式和数组:最有效的方法
- 正则表达式无效组
- JavaScript 字符串测试与正则表达式数组
- 为什么我的正则表达式捕获组只在匹配多个部分时捕获字符串的最后一部分
- Javascript 将正则表达式与组匹配
- 将字符串与正则表达式数组匹配
- 如何在javascript中对正则表达式数组使用replace
- 如何检查字符串是否与node.js中的正则表达式数组匹配
- Javascript正则表达式捕获组不工作
- 用正则表达式匹配组
- 创建正则表达式数组
- Javascript正则表达式捕获组中的单词和分隔符
- 是否有一种有效的方法来测试字符串是否包含非重叠子字符串以匹配正则表达式数组
- 使用正则表达式匹配组url参数
- 如何限制正则表达式捕获组
- 重复正则表达式捕获组