【问题标题】:parse coordinates from text从文本中解析坐标
【发布时间】:2018-02-17 01:38:12
【问题描述】:

我喜欢从这段文字中提取坐标:

Text
492k | 505k auf Punkt
https://www.seite.com/map?ll=30.123456,21.123456
Text
83k | 1,8 Mio auf Punkt
https://www.seite.com/map?ll=11.146724,27.427684
Text
82k | 121k auf Punkt
https://www.seite.com/map?ll=24.142451,36.127474
Text
20k | 65k auf Punkt
https://www.seite.com/map?ll=26.241442,16.323624
Text
11k | 93 auf Punkt
https://www.seite.com/map?ll=47.139682,14.124675

我试过了,但效果不好:https://jsfiddle.net/pnyqrgfz/ 结果应该是这样的:

30.123456,21.123456
11.146724,27.427684
24.142451,36.127474
26.241442,16.323624
47.139682,14.124675

【问题讨论】:

  • 预期输出是什么?
  • @axi92 检查答案,它完全符合您的需要

标签: javascript parsing coordinates coords


【解决方案1】:

这个简短的解决方案怎么样:

var source = 'https://www.seite.com/map?ll=30.123456,21.123456';
var pattern = /[0-9]+\.[0-9]+/g;
source.match(pattern);

输出:

["30.123456", "21.123456"]

具有完整且长输入的正则表达式示例:

https://regex101.com/r/5FXAW8/1

【讨论】:

  • 这不适用于负坐标,例如'-33.87354, 151.20693'
  • 这里支持负坐标regex101.com/r/5FXAW8/2var pattern = /[-0-9]+\.[-0-9]+/g;
【解决方案2】:

你可以使用下面的

function parse () 
{
	var lines = $("#textarea_input").val().split('\n');
	var coords = [];
	for(var i = 0;i < lines.length;i++)
	{
		//code here using lines[i] which will give you each line
		var m = lines[i].match(/\d{1,2}\.\d+,\d{1,2}\.\d+/);
		console.log(lines[i]);
		console.log('i:' + i + ' - ' + m);
		if (m != null)
		{
			coords.push(m);
			console.log(m);
		}
	}

	for(var i = 0;i < coords.length;i++)
	{
		//console.log(coords);
		$('#textarea_output').val($('#textarea_output').val()+coords[i]+'\n'); 
	}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="textarea_input" rows="15" cols="55">Text
492k | 505k auf Punkt
https://www.seite.com/map?ll=30.123456,21.123456
Text
83k | 1,8 Mio auf Punkt
https://www.seite.com/map?ll=11.146724,27.427684
Text
82k | 121k auf Punkt
https://www.seite.com/map?ll=24.142451,36.127474
Text
20k | 65k auf Punkt
https://www.seite.com/map?ll=26.241442,16.323624
Text
11k | 93 auf Punkt
https://www.seite.com/map?ll=47.139682,14.124675</textarea>
	<input type = "button" onclick = "parse();"/>
	<textarea id="textarea_output" rows="15" cols="55"></textarea>

【讨论】:

    【解决方案3】:

    你可以这样做:

    function parse () 
    {
    	var lines = $("#textarea_input").val().split('\n');
    	var coords = [];
    	for(var i = 0;i < lines.length;i++)
    	{
    		//code here using lines[i] which will give you each line
        if(lines[i].indexOf('?ll=') !== -1){
        	var lineArr = lines[i].split('?ll='); 
          if(lineArr.length!==0){
            var splitCords = lineArr[1].split(',');
            coords.push(splitCords[0]);
            coords.push(splitCords[1]);
          }
        }
    	}
    
    	for(var i = 0;i < coords.length;i++)
    	{
    		//console.log(coords);
      var newLine = '';
      var comma = ','
    	if(i%2 !== 0){
        newLine='\n';
        comma = '';
      }  
      
      $('#textarea_output').val($('#textarea_output').val()+coords[i]+comma+newLine); 
    	}
    }
    parse();
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    	
    	<textarea id="textarea_input" rows="15" cols="55">Text
    492k | 505k auf Punkt
    https://www.seite.com/map?ll=30.123456,21.123456
    Text
    83k | 1,8 Mio auf Punkt
    https://www.seite.com/map?ll=11.146724,27.427684
    Text
    82k | 121k auf Punkt
    https://www.seite.com/map?ll=24.142451,36.127474
    Text
    20k | 65k auf Punkt
    https://www.seite.com/map?ll=26.241442,16.323624
    Text
    11k | 93 auf Punkt
    https://www.seite.com/map?ll=47.139682,14.124675</textarea>
    	<input type = "button" onclick = "parse();"/>
    	<textarea id="textarea_output" rows="15" cols="55"></textarea>

    利用split()函数,效果很好。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2020-02-16
    • 1970-01-01
    相关资源
    最近更新 更多