如何用Javascript将字符串中的每一个逗号替换为空格



我正在尝试执行str.replace(/([0-9]+),s([0-9]+),s/g, '$1, $2 '),但这不起作用。

例如,当应用于此输入时:

35.15560188441565,31.738399966331848 , 35.2517322555094,31.705440981956848 , 35.28057136683753,31.742519839378723 , 35.28743782191565,31.798824771019348 , 35.27507820277503,31.842770083519348 , 35.20504036097815,31.872982485863098 , 35.16521492152503,31.841396792503723 , 35.14049568324378,31.807064517113098 , 35.15560188441565,31.738399966331848

我得到以下输出:

35.15560188441565,31.738399966331848 , 35.2517322555094,31.705440981956848 , 35.28057136683753,31.742519839378723 , 35.28743782191565,31.798824771019348 , 35.27507820277503,31.842770083519348 , 35.20504036097815,31.872982485863098 , 35.16521492152503,31.841396792503723 , 35.14049568324378,31.807064517113098 , 35.15560188441565,31.738399966331848

虽然使用正则表达式来转换输入字符串没有错(我不认为您可能对完整字符串有一些用处(,但解析表示浮点数的每对值似乎更有用。

另一种方法是对字符串进行迭代,跟踪看到的每个逗号,并在此过程中收集当前子字符串——然后,每隔一个逗号,解析现有子字符串以获得一对现有值。这将产生一个更灵活的数据结构,您可以进一步转换以用于其他方式。

下面是一个生成器函数的例子,它接受一个输入字符串(如问题中的字符串((以及一个可选的转换函数(,并为每个遇到的对生成一个转换结果。

我已经包含了一个默认输出的例子和一个提供自定义转换函数来生成lat-lon坐标对象的例子:

function* parsePairs (inputStr, transformer = (pair) => pair) {
let splitOnNextComma = false;
let current = '';
const trim = (str) => str.trim();
const getTrimmedPair = () => transformer(current.split(',').map(trim));
for (const str of inputStr) {
if (str !== ',') {
current += str;
continue;
}
if (!splitOnNextComma) {
splitOnNextComma = true;
current += str;
continue;
}
splitOnNextComma = false;
yield getTrimmedPair();
current = '';
}
if (current.includes(',')) yield getTrimmedPair();
}
const input = ' 35.15560188441565,31.738399966331848 , 35.2517322555094,31.705440981956848 , 35.28057136683753,31.742519839378723 , 35.28743782191565,31.798824771019348 , 35.27507820277503,31.842770083519348 , 35.20504036097815,31.872982485863098 , 35.16521492152503,31.841396792503723 , 35.14049568324378,31.807064517113098 , 35.15560188441565,31.738399966331848 ';
console.log('default result:');
for (const pair of parsePairs(input)) console.log(pair);
const asCoordsObj = ([first, second]) => ({
lat: Number(first),
lon: Number(second),
});
console.log('as coordinates objects:');
const coordsObjArray = [...parsePairs(input, asCoordsObj)];
console.log(coordsObjArray);

如果您想保持相同的空间量,可以使用2个捕获组,然后用空格替换第二个逗号:

(-?bd+(?:.d+)?s*,s*-?bd+(?:.d+)?s*),(s*)

更换时使用$1 $2

请参阅regex演示。

const regex = /(-?bd+(?:.d+)?s*,s*-?bd+(?:.d+)?s*),(s*)/gm;
const str = ` 35.15560188441565,31.738399966331848 , 35.2517322555094,31.705440981956848 , 35.28057136683753,31.742519839378723 , 35.28743782191565,31.798824771019348 , 35.27507820277503,31.842770083519348 , 35.20504036097815,31.872982485863098 , 35.16521492152503,31.841396792503723 , 35.14049568324378,31.807064517113098 , 35.15560188441565,31.738399966331848 `;
console.log(str.replace(regex, `$1 $2`));

最新更新