удалить пробелы между и после скобок - в одном регулярном выражении (javascript)

1

Удалите пробелы между скобками и после них.

Может ли это быть написано в одной строке (теперь у меня два)?

function removeSpaceAfterBeforeBrackets(str) {
    str = str.replace(/\s*\(\s*/gi, "(");
    str = str.replace(/\s*\)\s*/gi, ")");
    return str;
}
Теги:

4 ответа

2

Вы можете захватить пробел до и после скобки и самой круглой скобки с помощью or ([()]) в группе и использовать только скопированную скобку в replace.

В этом примере это будет группа 2 $2

function removeSpaceAfterBeforeBrackets(str) {
  return str.replace(/(\s*)([()])(\s*)/gi, "$2");
}
console.log(removeSpaceAfterBeforeBrackets("adfdfdf ( fdf ) ljlkjljk"));
console.log(removeSpaceAfterBeforeBrackets("adfdfdf ( fdf ) ljlkjlj( (  (()) )  ))) (( (k"));
  • 1
    @ Аарон Вы правы! Я обновил свой ответ.
0

Вам необходимо использовать специальные шаблоны replace метода replace, как описано здесь:

function removeSpaceAfterBeforeBrackets(str) {
    str = str.replace(/\s+([()])\s+/g, "$1");
    return str;
}

Это заменит полное соответствие регулярному выражению на группу захвата, которая в этом случае включает только символы круглых скобок.

Здесь мгновенный тест:

var regex = /\s+([()])\s+/g;
var input = "aaa a ( b bb b ) ccc c ( ddd";
console.log(input.replace(regex, "$1"));
0
function removeSpaceAfterBeforeBrackets(str) {
    str = str.replace(/\s*[\)|\(]\s*/gi, function(x){   
           return x.indexOf(')') > -1 ? ')' : '('; 
       });
    return str;
}

или ES6:

function removeSpaceAfterBeforeBrackets(str) {
    str = str.replace(/\s*[\)|\(]\s*/gi, x => x.indexOf(')') > -1 ? ')' : '(') 
    return str;
}
0

Вы можете сделать следующее: -

function removeSpaceAfterBeforeBrackets(str) {
    str = str.replace(/\s*\(\s*/gi|/\s*\)\s*/gi , "");
    return str;
}
  • 0
    Я был удивлен, что это будет работать с | вне конструкции /.../ , и оказывается, что это не так; вы просто используете логический | Оператор «или», который возвращает первое выражение, которое оценивается как true, то есть в вашем случае первый шаблон. Ваш код заменит пробелы перед скобками, но никогда после.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню