正则表达式在Javascript中的括号之间获取字符串

时间:2013-07-22 04:02:29

标签: javascript regex string

我正在尝试编写一个正则表达式,它返回括号之间的字符串。例如:我想获得字符串“(”和“)”

之间的字符串
I expect five hundred dollars ($500).

将返回

$500

找到Regular Expression to get a string between two strings in Javascript

但我是正则表达式的新手。我不知道如何在regexp中使用'(',')'

10 个答案:

答案 0 :(得分:391)

您需要创建一组转义(带\)个括号(与括号匹配)和一组创建捕获组的常规括号:

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

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

故障:

  • \(:匹配左括号
  • (:开始捕获群组
  • [^)]+:匹配一个或多个非)个字符
  • ):结束捕获小组
  • \):匹配结束括号

以下是RegExplained

的直观说明

答案 1 :(得分:28)

尝试字符串操作:

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]);
}

或正则表达式(有点slow compare to the above

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));
}

答案 2 :(得分:8)

Mr_Green's answer移植到函数式编程样式以避免使用临时全局变量。

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

答案 3 :(得分:3)

仅适用于货币符号后的数字:\(.+\s*\d+\s*\)应该有效

\(.+\)括号内的任何内容

答案 4 :(得分:3)

简单解决方案

注意:此解决方案用于仅包含单个&#34;(&#34;和&#34;)&#34;像这个问题中的字符串一样。

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

Online demo (jsfiddle)

答案 5 :(得分:3)

替代:

var str = "I expect five hundred dollars ($500) ($1).";
str.match(/\(.*?\)/g).map(x => x.replace(/[()]/g, ""));
→ (2) ["$500", "$1"]

如果需要,可以将方括号替换为方括号或大括号

答案 6 :(得分:2)

要匹配括号内的子字符串(不包括您可能使用的任何内部括号)

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

模式。参见the regex demo

在JavaScript中,请像使用

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

模式详细信息

  • \(-一个(字符
  • ([^()]*)-捕获组1:与()之外的0个或更多字符匹配的negated character class
  • \)-一个)字符。

要获得全部匹配,请获取组0值,如果需要括号内的文本,请获取组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));
}

答案 7 :(得分:1)

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

答案 8 :(得分:1)

简单: (?<value>(?<=\().*(?=\)))

希望我有所帮助。

答案 9 :(得分:0)

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

将匹配以$开头的第一个数字,然后是&#39;)&#39;。 &#39;)&#39;不会参加比赛。代码会在第一场比赛时发出警报。

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]);
}

此代码会提醒所有匹配。

参考文献:

搜索&#34;?= n&#34; http://www.w3schools.com/jsref/jsref_obj_regexp.asp

搜索&#34; x(?= y)&#34; https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp