Удалите пробелы между скобками и после них.
Может ли это быть написано в одной строке (теперь у меня два)?
function removeSpaceAfterBeforeBrackets(str) {
str = str.replace(/\s*\(\s*/gi, "(");
str = str.replace(/\s*\)\s*/gi, ")");
return str;
}
Вы можете захватить пробел до и после скобки и самой круглой скобки с помощью 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"));
Вам необходимо использовать специальные шаблоны 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"));
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;
}
Вы можете сделать следующее: -
function removeSpaceAfterBeforeBrackets(str) {
str = str.replace(/\s*\(\s*/gi|/\s*\)\s*/gi , "");
return str;
}
|
вне конструкции /.../
, и оказывается, что это не так; вы просто используете логический |
Оператор «или», который возвращает первое выражение, которое оценивается как true, то есть в вашем случае первый шаблон. Ваш код заменит пробелы перед скобками, но никогда после.