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



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



I expect five hundred dollars (0).


вернутся



0


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



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

905   7  

7 ответов:

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

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

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

поломки:

  • \(: соответствует открывающим скобкам
  • ( : начать захват группы
  • [^)]+: матч один или несколько ) символы
  • ) : конец захвата группы
  • \) : матч закрытия скобки

вот визуальное объяснение на RegExplained

попробуйте манипуляции со строками:

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

или regex (что-то медленно по сравнению с выше)

var txt = "I expect five hundred dollars (0). and new brackets (0)";
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));
}

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

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

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

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

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

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

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

онлайн демо (jsfiddle)

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

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

узор. Смотрите the regex demo.

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

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

детали шаблон

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

var strs = ["I expect five hundred dollars (0).", "I expect.. :( five hundred dollars (0)."];
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));
}
var str = "I expect five hundred dollars (0) ().";
var rex = /$\d+(?=\))/;
alert(rex.exec(str));

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

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

этот код предупреждает со всеми матчами.

ссылки:

поиск "?=северный" http://www.w3schools.com/jsref/jsref_obj_regexp.asp

поиск "x(?=год)" https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp

Comments

    Ничего не найдено.