正则表达式:select [] 在字符串中的第一次和最后一次出现
Regex: select first and last occurence of [] in a String
我正在尝试自动更改 GeoJSON 消息中的坐标:
{
"type" : "Feature",
"properties" : {},
"geometry" : {
"type" : "LineString",
"coordinates" : [
[
4.399842023849487,
51.97148460936231
],
[
4.386194944381714,
52.003202463721045
]
]
}
}
为此,我正在寻找一种方法来 select 第一个坐标对 ( 4.399842023849487,51.97148460936231) 和最后一个 ( 4.386194944381714,52.003202463721045)。在这种情况下,只有两对,但正则表达式应该寻找最后一对。)。
随后,这 2 个 selected 字符串将被替换为我已经从另一个来源提取的 2 个坐标。
最 sturdy/robust 的方法是什么?正则表达式是要走的路吗?
编辑:
用 org.json 解析器解决了。
JSONObject obj = new JSONObject(inputdata);
JSONArray coordinateArr = obj.getJSONArray("coordinates");
String firstOldCoordinate = coordinateArr.get(0).toString();
String lastOldCoordinate = coordinateArr.get(1).toString();
String newJSON = inputdata.replace(firstOldCoordinate, firstNewCoordinate).replace(lastOldCoordinate, lastNewCoordinate);
我不认为正则表达式是完成这一切的简洁有效的解决方案。相反,使用 jQuery.parseJSON() 是最好的方法。查看下面的解决方案。这是 fiddle:http://jsfiddle.net/hacker1211/ewoma0tc/
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
var obj = jQuery.parseJSON( '{"type": "Feature","properties": {},"geometry": {"type": "LineString","coordinates": [[4.399842023849487,51.97148460936231],[4.386194944381714,52.003202463721045]]}}' );
obj.geometry.coordinates[0]=[7.399842023849487,60.97148460936231]; //your custom coordinates
obj.geometry.coordinates[obj.geometry.coordinates.length-1]=[7.399842023849487,60.97148460936231];//your custom coordinates
alert( obj.geometry.coordinates[0]);
alert( obj.geometry.coordinates[obj.geometry.coordinates.length-1]);
使用 jq (https://stedolan.github.io/jq) 可以使用以下 jq 过滤器完成任务:
.geometry.coordinates[0] = ["one", "two"]
| .geometry.coordinates[-1] = ["three", "four"]
用适当的值替换字符串的位置。
假设输入在名为 geojson.json 的文件中,并且以上两行在文件名 geojson.jq 中,这里是显示输出的抄本:
$ jq -f geojson.jq geojson.json
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[
"one",
"two"
],
[
"three",
"four"
]
]
}
}
以上假定jq版本为1.5(当前版本);对于 jq 1.4,程序将是以下三行:
(.geometry.coordinates|length -1 ) as $last
| .geometry.coordinates[0] = ["one", "two"]
| .geometry.coordinates[$last] = ["three", "four"]
程序也可以很容易地参数化。
我正在尝试自动更改 GeoJSON 消息中的坐标:
{
"type" : "Feature",
"properties" : {},
"geometry" : {
"type" : "LineString",
"coordinates" : [
[
4.399842023849487,
51.97148460936231
],
[
4.386194944381714,
52.003202463721045
]
]
}
}
为此,我正在寻找一种方法来 select 第一个坐标对 ( 4.399842023849487,51.97148460936231) 和最后一个 ( 4.386194944381714,52.003202463721045)。在这种情况下,只有两对,但正则表达式应该寻找最后一对。)。 随后,这 2 个 selected 字符串将被替换为我已经从另一个来源提取的 2 个坐标。
最 sturdy/robust 的方法是什么?正则表达式是要走的路吗?
编辑:
用 org.json 解析器解决了。
JSONObject obj = new JSONObject(inputdata);
JSONArray coordinateArr = obj.getJSONArray("coordinates");
String firstOldCoordinate = coordinateArr.get(0).toString();
String lastOldCoordinate = coordinateArr.get(1).toString();
String newJSON = inputdata.replace(firstOldCoordinate, firstNewCoordinate).replace(lastOldCoordinate, lastNewCoordinate);
我不认为正则表达式是完成这一切的简洁有效的解决方案。相反,使用 jQuery.parseJSON() 是最好的方法。查看下面的解决方案。这是 fiddle:http://jsfiddle.net/hacker1211/ewoma0tc/
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
var obj = jQuery.parseJSON( '{"type": "Feature","properties": {},"geometry": {"type": "LineString","coordinates": [[4.399842023849487,51.97148460936231],[4.386194944381714,52.003202463721045]]}}' );
obj.geometry.coordinates[0]=[7.399842023849487,60.97148460936231]; //your custom coordinates
obj.geometry.coordinates[obj.geometry.coordinates.length-1]=[7.399842023849487,60.97148460936231];//your custom coordinates
alert( obj.geometry.coordinates[0]);
alert( obj.geometry.coordinates[obj.geometry.coordinates.length-1]);
使用 jq (https://stedolan.github.io/jq) 可以使用以下 jq 过滤器完成任务:
.geometry.coordinates[0] = ["one", "two"]
| .geometry.coordinates[-1] = ["three", "four"]
用适当的值替换字符串的位置。
假设输入在名为 geojson.json 的文件中,并且以上两行在文件名 geojson.jq 中,这里是显示输出的抄本:
$ jq -f geojson.jq geojson.json
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[
"one",
"two"
],
[
"three",
"four"
]
]
}
}
以上假定jq版本为1.5(当前版本);对于 jq 1.4,程序将是以下三行:
(.geometry.coordinates|length -1 ) as $last
| .geometry.coordinates[0] = ["one", "two"]
| .geometry.coordinates[$last] = ["three", "four"]
程序也可以很容易地参数化。