2016-11-30 629 views
0

之前删除的空间,我需要删除第一个括号后面的空格和下面的字符串的最后一个括号前的空格:正则表达式来第一个括号后和最后一个括号

POINT (-68.1712366598 -16.5122344611 4124.6247727228) 
POINT (-68.1712366598 -16.5122344611) 
POINT Z (-68.1712366598 -16.5122344611 4124.6247727228) 
POINT Z (-68.1712366598 -16.5122344611) 

的结果将是:

POINT (-68.1712366598 -16.5122344611 4124.6247727228) 
POINT (-68.1712366598 -16.5122344611) 
POINT Z (-68.1712366598 -16.5122344611 4124.6247727228) 
POINT Z (-68.1712366598 -16.5122344611) 

我可以得到第一个空间,但与最后一个空间有问题。

^\w*\s*\((\s*) 

请参阅regex101我尝试

回答

2

只是.replace(/\(\s*(.*?)\s*\)/,"($1)"))

的想法是使用非贪婪捕捉,.*?,捕捉两个部分,以取代之间有什么。

示范:

document.getElementById("output").innerHTML = document.getElementById("input") 
 
    .innerHTML.split("\n") 
 
    .map(line=>line.replace(/\(\s*(.*?)\s*\)/,"($1)")) 
 
    .join("\n");
<pre id=input> 
 
POINT (-68.1712366598 -16.5122344611 4124.6247727228) 
 
POINT (-68.1712366598 -16.5122344611) 
 
POINT Z (-68.1712366598 -16.5122344611 4124.6247727228) 
 
POINT Z (-68.1712366598 -16.5122344611) 
 
</pre> 
 
<pre id=output> 
 
</pre>

+0

简单,我喜欢。我更新了你的'\ s'标记以包含一个'*'量词,这样就可以覆盖像'POINT(5 4 10)'这样的情况(或任何其他的空格变体)。谢谢。 – bflemi3

3

您可以使用此正则表达式与捕获正则表达式替换:

String repl = str.replace(/^([^(]+\()\s*([^)]+?)\s*\)/, "$1$2)"); 

Updated Regex Demo

+1

在您的演示,风味切换到JavaScript的 – bflemi3

+0

感谢,更新了演示。 – anubhava

0

简单易懂的解决方案,虽然不一定是最佳:

var input = 'POINT (-68.1712366598 -16.5122344611 4124.6247727228)'; 
 

 
var formatted = input 
 
    .replace(/\(+/g, '(') 
 
    .replace(/ +\)/g, ')'); 
 

 
console.log(formatted); // "POINT (-68.1712366598 -16.5122344611 4124.6247727228)"

相关问题