2016-11-30 189 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)"

相關問題