Регулярное выражение для получения строки между круглыми скобками в Javascript

Я пытаюсь написать регулярное выражение, которое возвращает строку, которая находится между круглыми скобками. Например: я хочу получить строку, которая находится между строками "(" и ")"

I expect five hundred dollars ($500).

вернет

$500

Найдено Регулярное выражение для получения строки между двумя строками в Javascript

Но я новичок в регулярном выражении. Я не знаю, как использовать '(', ')' в regexp

Ответ 1

Вам нужно создать набор экранированных (с \) скобок (соответствующих скобкам) и группу регулярных скобок, которые создают вашу группу захвата:

var regExp = /\(([^)]+)\)/;
var matches = regExp.exec("I expect five hundred dollars ($500).");

//matches[1] contains the value between the parentheses
console.log(matches[1]);

Ответ 2

Попробуйте манипулировать строкой:

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var newTxt = txt.split('(');
for (var i = 1; i < newTxt.length; i++) {
    console.log(newTxt[i].split(')')[0]);
}

или регулярное выражение (что немного медленное сравнение с приведенным выше)

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var regExp = /\(([^)]+)\)/g;
var matches = txt.match(regExp);
for (var i = 0; i < matches.length; i++) {
    var str = matches[i];
    console.log(str.substring(1, str.length - 1));
}

Ответ 3

Портировано Mr_Green ответ в стиле функционального программирования, чтобы избежать использования временных глобальных переменных.

var matches = string2.split('[')
  .filter(function(v){ return v.indexOf(']') > -1})
  .map( function(value) { 
    return value.split(']')[0]
  })

Ответ 4

Только цифры после знака валюты: \(.+\s*\d+\s*\) должен работать

Или \(.+\) для чего-либо внутри скобок

Ответ 5

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

\(([^()]*)\)

шаблон. См. Демо-версию regex.

В JavaScript используйте его как

var rx = /\(([^()]*)\)/g;

Сведения о шаблоне

Чтобы получить полное совпадение, возьмите значение Group 0, если вам нужен текст внутри круглых скобок, возьмите значение Group 1:

var strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
var rx = /\(([^()]*)\)/g;


for (var i=0;i<strs.length;i++) {
  console.log(strs[i]);

  // Grab Group 1 values:
  var res=[], m;
  while(m=rx.exec(strs[i])) {
    res.push(m[1]);
  }
  console.log("Group 1: ", res);

  // Grab whole values
  console.log("Whole matches: ", strs[i].match(rx));
}

Ответ 6

Простое решение

Уведомление: это решение используется для строки, которая имеет только одну строку ( "и" ) как строку в этом вопросе.

("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();

Онлайн-демонстрация (jsfiddle)

Ответ 7

var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/;
alert(rex.exec(str));

Будет соответствовать первое число, начинающееся с $и сопровождаемое ')'. ')' не будет частью матча. Код предупреждает о первом совпадении.

var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/g;
var matches = str.match(rex);
for (var i = 0; i < matches.length; i++)
{
    alert(matches[i]);
}

Этот код предупреждает обо всех матчах.

Литература:

найти "? = n" http://www.w3schools.com/jsref/jsref_obj_regexp.asp

найдите "x (? = y)" https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp

Ответ 8

let str = "Before brackets (Inside brackets) After brackets".replace(/.*\(|\).*/g, '');
console.log(str) // Inside brackets