我有这种格式的字符串:
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
,可以是任意数字。
答案 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