删除所有其他逗号并用方括号括起来
Remove every other comma and surround with brackets
所以使用 jquery 我得到了一串坐标,如下所示:
38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976
我需要它们看起来像这样:
[38.313072, -89.863845] [38.312675, -89.863586] [38.310405, -89.862091] [38.310405,-89.862091] [38.309913, -89.861976] [38.309768, -89.861976] [38.309768, -89.861976] [38.30965, -89.861991]
所以我需要弄清楚如何用 space 和括号坐标集替换所有其他逗号。
想法?
不漂亮,但它有效:
var coordinateString = "38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976";
var coordinateArray = coordinateString.split(",");
var coordinateResult = "";
var i = 0;
while(i<coordinateArray.length){
coordinateResult +="[" + coordinateArray[i] + ", " + coordinateArray[i+1] + "]";
i += 2;
}
您可以使用正则表达式。
([-\d.]+),([-\d.]+),?
Regex Explanation and Live Demo
[-\d.]
:字符class,-
将匹配文字-
连字符,\d
将匹配单个数字,.
将按字面匹配 .
。当在 class 中提到时,顺序无关紧要。
+
:匹配一个或多个先前匹配项
(...)
:捕获组。捕获大括号内的匹配项并在 </code>、<code>
、... 中返回
,?
:不匹配每隔一个逗号
g
:全局匹配。匹配所有可能出现的情况。
var str = '38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976';
var result = str.replace(/([-\d.]+),([-\d.]+),?/g, '[, ] ').trim();
document.getElementById('output').innerHTML = JSON.stringify(result, 0, 2);
<pre id="output"></pre>
这应该可以完成工作。
function toPairs(src){
// Split the string into values.
var values = src.split(',');
// Group these values 2 by 2.
var pairs = [];
for(var i = 0; i < values.length; i += 2){
pairs.push("[" + values[i] + ", " + values[i + 1] + "]");
}
// Join with a whitespace.
return pairs.join(" ");
}
document.body.innerHTML = toPairs("38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976");
尝试利用 while
循环,Array.prototype.splice()
,以数组数组的形式返回结果
var str = "38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976"
, res = []
, arr = str.split(",");
while (arr.length) res.push(arr.splice(0, 2))
console.log(res, JSON.stringify(res, null, 2))
使用正则表达式!
非常适合这个!
var str = "38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976,38.30965, -89.861991";
var expected = "[38.313072, -89.863845] [38.312675, -89.863586] [38.310405, -89.862091] [38.310405,-89.862091] [38.309913, -89.861976] [38.309768, -89.861976] [38.309768, -89.861976] [38.30965, -89.861991]"
var computed = str.replace(/(([0-9\-. ]*)(,)([0-9\-. ]*)),?/g, '[ ] ');
document.write('computed<br>')
document.write(str.replace(/(([0-9\-. ]*)(,)([0-9\-. ]*)),?/g, '[ ] '))
document.write( "<hr>expected<br>" + expected )
所以使用 jquery 我得到了一串坐标,如下所示:
38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976
我需要它们看起来像这样:
[38.313072, -89.863845] [38.312675, -89.863586] [38.310405, -89.862091] [38.310405,-89.862091] [38.309913, -89.861976] [38.309768, -89.861976] [38.309768, -89.861976] [38.30965, -89.861991]
所以我需要弄清楚如何用 space 和括号坐标集替换所有其他逗号。
想法?
不漂亮,但它有效:
var coordinateString = "38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976";
var coordinateArray = coordinateString.split(",");
var coordinateResult = "";
var i = 0;
while(i<coordinateArray.length){
coordinateResult +="[" + coordinateArray[i] + ", " + coordinateArray[i+1] + "]";
i += 2;
}
您可以使用正则表达式。
([-\d.]+),([-\d.]+),?
Regex Explanation and Live Demo
[-\d.]
:字符class,-
将匹配文字-
连字符,\d
将匹配单个数字,.
将按字面匹配.
。当在 class 中提到时,顺序无关紧要。+
:匹配一个或多个先前匹配项(...)
:捕获组。捕获大括号内的匹配项并在</code>、<code>
、... 中返回
,?
:不匹配每隔一个逗号g
:全局匹配。匹配所有可能出现的情况。
var str = '38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976';
var result = str.replace(/([-\d.]+),([-\d.]+),?/g, '[, ] ').trim();
document.getElementById('output').innerHTML = JSON.stringify(result, 0, 2);
<pre id="output"></pre>
这应该可以完成工作。
function toPairs(src){
// Split the string into values.
var values = src.split(',');
// Group these values 2 by 2.
var pairs = [];
for(var i = 0; i < values.length; i += 2){
pairs.push("[" + values[i] + ", " + values[i + 1] + "]");
}
// Join with a whitespace.
return pairs.join(" ");
}
document.body.innerHTML = toPairs("38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976");
尝试利用 while
循环,Array.prototype.splice()
,以数组数组的形式返回结果
var str = "38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976"
, res = []
, arr = str.split(",");
while (arr.length) res.push(arr.splice(0, 2))
console.log(res, JSON.stringify(res, null, 2))
使用正则表达式! 非常适合这个!
var str = "38.313072,-89.863845,38.312675,-89.863586,38.310405,-89.862091,38.310405,-89.862091,38.309913,-89.861976,38.309768,-89.861976,38.309768,-89.861976,38.30965, -89.861991";
var expected = "[38.313072, -89.863845] [38.312675, -89.863586] [38.310405, -89.862091] [38.310405,-89.862091] [38.309913, -89.861976] [38.309768, -89.861976] [38.309768, -89.861976] [38.30965, -89.861991]"
var computed = str.replace(/(([0-9\-. ]*)(,)([0-9\-. ]*)),?/g, '[ ] ');
document.write('computed<br>')
document.write(str.replace(/(([0-9\-. ]*)(,)([0-9\-. ]*)),?/g, '[ ] '))
document.write( "<hr>expected<br>" + expected )