Как использовать регулярные выражения в JavaScript, чтобы сопоставить строку с двойными кавычками - PullRequest
0 голосов
/ 26 января 2019

Я очень новичок в регулярных выражениях, и я не уверен, как извлечь кусок теста из очень большой строки с помощью регулярного выражения.

предположим, что строка такая: К вашему сведению: эта строка будет генерироваться динамически, извлекая различные элементы из базы данных и домена. У меня нет большого контроля над тем, как он создается.

Lorem Ipsum Dolor Sit Amet, Заклинатель, жировой элит. Voluptas architecto dicta amet cumque, atque, labour eos nobis earum fuga tempore officiis excúr. Rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, аналогично porro quam needitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis exculuri rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, подобный porro quam needitatibus nobis velit debitis.

Мне нужно получить текст внутри промежутка, который имеет итерационную метку itemNum.

Я попробовал это, но у меня это не сработало:

/\b(itemprop=\"sku\"")\b/g

В конечном счете, в переменной было бы только 56789.

Спасибо всем заранее.

Ответы [ 4 ]

0 голосов
/ 26 января 2019

Одним из подходов к достижению цели получения значения, если вам не обязательно использовать регулярное выражение, было бы использование DOMParser для первого разбора строки, а затем получения элемента, например, например, querySelect:

const str = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.';

const parser = new DOMParser();
const doc = parser.parseFromString(str, "text/html");
console.log(doc.querySelector('span[itemprop="itemNum"]').innerHTML)
0 голосов
/ 26 января 2019

На основе https://stackoverflow.com/a/14210948/3999647 только что обновлено регулярное выражение и введено

function getMatches(string, regex, index) {
  index || (index = 1); // default to the first capturing group
  var matches = [];
  var match;
  while (match = regex.exec(string)) {
    matches.push(match[index]);
  }
  return matches;
}


// Example :
var myString = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.';
var myRegEx = /(<span itemprop="\w+">)(\d+)(<\/span>)/g;

// Get an array containing the first capturing group for every match
var matches = getMatches(myString, myRegEx, 2);

// Log results
document.write(matches.length + ' matches found: ' + JSON.stringify(matches))
console.log(matches);
0 голосов
/ 26 января 2019

Одно вероятное решение.

let str = `Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.`

let op = str.match(/<[^>]+>([^<]+)<\/[^>]+>/g).map(e=>e.replace(/.*?>(.*)<.*/, "$1"))

console.log(op)
0 голосов
/ 26 января 2019

Используя regex lookbehind для itemprop="itemNum"> и lookahead для </, просто захватите все, что находится между.

const data = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.'

const res = data
.match(/(?<=itemprop\="itemNum"\>).+(?=\<\/)/)
//returns an array... get first value
.shift();

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