2016-11-30 2 views
0

Мне нужно удалить пробел после первой скобки и пространство перед последней скобкой из следующих строк:Regex удалить пробел после первой скобки и перед последней скобкой

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

В вашем демо, переключите аромат яваскрипта – 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)"