如何在正则表达式中提取字符串

时间:2015-05-25 09:41:32

标签: javascript regex

我有这种格式的字符串:

var a="input_[2][invoiceNO]";

我想提取" invoiceNo"串。我试过了:

var a="input_[2][invoiceNO]";
    var patt = new RegExp('\[(.*?)\]');
    var res = patt.exec(a);

但是,我得到以下输出:

Array [ "[2]", "2" ]

我想从字符串中仅提取invoiceNo

注意:输入开头可以是任意字符串,代替数字2,可以是任意数字。

6 个答案:

答案 0 :(得分:2)

我会检查必要[...]之前的[InvoiceNo]是否包含数字,并且前面带有_此正则表达式:

/_\[\d+\]\s*\[([^\]]+)\]/g

说明:

  • _ - 匹配下划线
  • \[\d+\] - 匹配[1234] - 类似子字符串
  • \s* - 可选空格
  • \[([^\]]+)\] - [some_invoice_123] - 类似子字符串

您甚至可以使用此正则表达式在较大的文本中查找发票号。

该值位于捕获组1中(请参阅下面的m[1])。

示例代码:



var re = /_\[\d+\]\s*\[([^\]]+)\]/g; 
var str = 'input_[2][invoiceNO]';
while ((m = re.exec(str)) !== null) {
    alert(m[1]);
}




答案 1 :(得分:0)

您可以使用此正则表达式:

/\[(\w{2,})\]/

并从String.match函数的结果数组中抓取捕获的组#1。

var str = 'input_[2][invoiceNO]'
var m = str.match(/\[(\w{2,})\]/);
//=> ["[invoiceNO]", "invoiceNO"]

PS:您也可以使用负向前瞻来抓取相同的字符串:

var m = str.match(/\[(\w+)\](?!\[)/);

答案 2 :(得分:0)

var a="input_[2][invoiceNO]";
var patt = new RegExp('\[(.*?)\]$');
var res = patt.exec(a);

答案 3 :(得分:0)

试试这个:

var a="input_[2][invoiceNO]";
var patt = new RegExp(/\]\[(.*)\]/);
var res = patt.exec(a)[1];
console.log(res);

输出:

invoiceNO

答案 4 :(得分:0)

您可以使用类似的内容:\[([^[]+)\]$。这将提取最后一组括号内的内容。可用示例here

答案 5 :(得分:0)

使用var a="input_[2][invoiceNO]"; var patt = new RegExp('.*\[(.*?)\]'); var res = patt.exec(a);

的贪婪
PDF