извлечение данных с помощью регулярных выражений - PullRequest
0 голосов
/ 02 февраля 2019

Я хочу извлечь название продукта и цену.результат orc'd - название продукта и цена не совпадают.Итак, как мне включить строку до цены?

образец структуры продукта от получения:

RETAIL
UPRICE QTY TOTAL
ILLUSTRATION BOARD 15X20 (1/4 SIZE ) BY
1276
12.50 1.0 12.50
MONGOL PENCIL 1,2,3 PC
434
6.50 1.0 6.50
MS 300 (MGK) PERMANENT MARKER
1470
3.75 1.0 3.75
HBW White Glue 40 grans
1690
10.00 1.0 10.00
COLOR PEN 8 COLORS (VARIOUS BRAND)
1930
16.50 1.0 16.50
KS /CREATION CONSTRUCTION PAPER (105)
3503
23.00 1.0 23.00

это регулярное выражение, которое я пробовал, норезультат не включает название продукта, только цену.this.result содержит данные (образец, приведенный выше) из чека

ts file

   this.result = {
      merchant: text.split("\n")[0],
      product: text.split("\n").filter(t => t.match(/([\w\s]+)(\d+\.\d{2})/))
   };

html file

 <ion-card *ngIf="result">
    <ion-card-content>
      <p>Results:</p>
      <ion-item>
        <ion-label>Merchant</ion-label>
        <ion-input type="text" value="{{result.merchant}}"></ion-input>
      </ion-item>
      <ion-item *ngFor="let product of result.product; let i = index">
        <ion-label>Product #{{i+1}}</ion-label>
        <ion-input type="text" value="{{product}}"></ion-input>
      </ion-item>
    </ion-card-content>
  </ion-card>

1 Ответ

0 голосов
/ 02 февраля 2019

То, что вы можете сделать, чтобы получить свой результат, - это 2 захвата в группе 2 раза любого персонажа, за которым следует новая строка с последующим захватом цены в группе.

(.+\n.+\n)(\d+\.\d{1,2})

Regex demo

Пояснение

  • (.+\n.+\n) Захват в группе, соответствующей 2 раза 1+ символов, за которыми следует новая строка
  • (\d+\.\d{1,2})Захват в группе из 1+ цифр, за которыми следуют точка и 1+ цифры

Например:

const regex = /(.+\n.+\n)(\d+\.\d{1,2})/g;
let products = [];

while ((m = regex.exec(str)) !== null) {
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    products.push([m[1].replace(/\n/g, ''), m[2]]);
}

let str = `RETAIL
UPRICE QTY TOTAL
ILLUSTRATION BOARD 15X20 (1/4 SIZE ) BY
1276
12.50 1.0 12.50
MONGOL PENCIL 1,2,3 PC
434
6.50 1.0 6.50
MS 300 (MGK) PERMANENT MARKER
1470
3.75 1.0 3.75
HBW White Glue 40 grans
1690
10.00 1.0 10.00
COLOR PEN 8 COLORS (VARIOUS BRAND)
1930
16.50 1.0 16.50
KS /CREATION CONSTRUCTION PAPER (105)
3503
23.00 1.0 23.00`;

const regex = /(.+\n.+\n)(\d+\.\d{1,2})/g;
let products = [];

while ((m = regex.exec(str)) !== null) {
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  products.push([m[1].replace(/\n/g, ' '), m[2]]);
}

console.log(products);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...