2015-05-25 3 views
1

У меня есть строка в этом формате:Как извлечь строку в регулярном выражении

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 это может быть любое число.

ответ

2

Я хотел бы проверить, если [...] до необходимой [InvoiceNo] содержит цифры и предшествует _ с этим регулярным выражением:

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

Объяснение:

  • _ - Матч подчеркивает
  • \[\d+\] - Match [1234] -кака подстроки
  • \s* - Дополнительные пространства
  • \[([^\]]+)\] - The [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]); 
 
}


0

Вы можете использовать это регулярное выражение:

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

и захватить в плен группу # 1 из результате массив String.match функции.

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

PS: Вы можете также использовать отрицательный предпросмотр, чтобы захватить ту же строку:

var m = str.match(/\[(\w+)\](?!\[)/); 
0
var a="input_[2][invoiceNO]"; 
var patt = new RegExp('\[(.*?)\]$'); 
var res = patt.exec(a); 
0

Попробуйте это:

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

Выход:

invoiceNO 
0

Вы можете использовать что-то вроде этого: \[([^[]+)\]$. Это приведет к извлечению содержимого в последнем наборе скобок. Пример доступен here.

0

Используйте прожорливость из .*

var a="input_[2][invoiceNO]"; 
var patt = new RegExp('.*\[(.*?)\]'); 
var res = patt.exec(a); 
Смежные вопросы