Как сделать «обратный формат» - PullRequest
1 голос
/ 11 апреля 2019

Я пытаюсь найти способ сбора данных со строковых входов и облегчить их работу с контейнерами.Например:

var message = "Sarah has been promoted to Superintendent";

Я знаю, как проверить строку на соответствие регулярному выражению и узнать, соответствует ли она:

message.test(\[a-zA-Z]+ has been promoted to [a-zA-Z]+\g);

Однако я не могу понять, как,затем, чтобы найти индексы совпадений регулярных выражений, чтобы поместить их в объект:

Promotion { name: "Sarah" , position: "Superintendent" }

Я чувствую, что ответ на кончике моих мозговых клеток, но я в растерянности.Каковы шаги, чтобы, скажем, захватить индекс первого подстановочного знака в строке, отделить это слово, а затем сделать это для следующего фрагмента данных (будучи достаточно гибким, чтобы обрабатывать до 9 или около того «подстановочных знаков»? *)1010 *

Ответы [ 3 ]

0 голосов
/ 11 апреля 2019

Да, вам понадобятся группы захвата.

var message = "Sarah has been promoted to Superintendent";
var match = /([a-zA-Z]+) has been promoted to ([a-zA-Z]+)/g.exec(message);
console.log(match[1], match[2]);

выходы

Sarah Superintendent

См. здесь для более подробного объяснения о RegExp.exec().

0 голосов
/ 11 апреля 2019

Выезд String.prototype.match: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

    let message = "Sarah has been promoted to Superintendent";
    let [, name, position] = message.match(/([a-zA-Z]+) has been promoted to ([a-zA-Z]+)/);
    let promotion = {name, position};
    
    console.log(promotion);
0 голосов
/ 11 апреля 2019
 var message = "Sarah has been promoted to Superintendent";
 groups = /([a-zA-Z]+) has been promoted to ([a-zA-Z]+)/.exec(message)

даст вам

["Sarah has been promoted to Superintendent", "Sarah", "Superintendent"]

Удаляя флаг g, вы позволяете ему совпадать только один раз, что позволяет помещать в массив подстроки, соответствующие подшаблонам в скобках, и, используя exec вместо test, вы возвращаете массив вместо логического значения .

Если match не равно нулю, первый подшаблон в скобках слева направо будет в match[1], а второй в match[2].

...