preg_match в JavaScript?


77

Чи можна JavaScriptзробити щось подібне як preg_matchробить у PHP?

Я хотів би мати можливість отримати два числа із рядка:

var text = 'price[5][68]';

на дві відокремлені змінні:

var productId = 5;
var shopId    = 68;

Редагувати: я також використовую, MooToolsякщо це допомогло б.

Відповіді:


113

JavaScript має RegExpоб’єкт, який робить те, що ви хочете. StringОб'єкт має match()функцію , яка допоможе вам.

var matches = text.match(/price\[(\d+)\]\[(\d+)\]/);
var productId = matches[1];
var shopId    = matches[2];

32
Для інших Google; text.matchповерне результат відповідності. так var match = text.match(/price\[(\d+)\]\[(\d+)\]/)і тодіalert(match[1]);
Моріс

33
var text = 'price[5][68]';
var regex = /price\[(\d+)\]\[(\d+)\]/gi;
match = regex.exec(text);

match [1] та match [2] міститимуть цифри, які ви шукаєте.


23
var thisRegex = new RegExp('\[(\d+)\]\[(\d+)\]');

if(!thisRegex.test(text)){
    alert('fail');
}

Я виявив, що тест діє більше preg_match, оскільки він забезпечує логічне повернення. Однак вам потрібно оголосити RegExp var.

ПОРАДА: RegExp додає власний / на початку та закінченні, тому не передавайте їх.


6
Ви також можете скоротити це з/\[(\d+)\]\[(\d+)\]/.test(text)
0x6C77

Я згоден, оскільки я шукав, як відтворити функцію тестування регулярних виразів preg_match, коли побачив заголовок цього запитання;)
грип

Використання конструктора класу RegExp має ту перевагу, що якщо вам потрібно інтерполювати змінну в шаблоні, вона приймає рядок!
Натаніель Роджерс

Мені працює лише під час уникнення зворотних скісних рисок, наприклад '\ [(\\ d +) \] \ [(\\ d +) \]'
nr

6

Це має спрацювати:

var matches = text.match(/\[(\d+)\][(\d+)\]/);
var productId = matches[1];
var shopId = matches[2];

4
var myregexp = /\[(\d+)\]\[(\d+)\]/;
var match = myregexp.exec(text);
if (match != null) {
    var productId = match[1];
    var shopId = match[2];
} else {
    // no match
}

0

Зразок коду для отримання посилань на зображення у вмісті HTML. Як preg_match_all у PHP

let HTML = '<div class="imageset"><table><tbody><tr><td width="50%"><img src="htt ps://domain.com/uploads/monthly_2019_11/7/1.png.jpg" class="fr-fic fr-dii"></td><td width="50%"><img src="htt ps://domain.com/uploads/monthly_2019_11/7/9.png.jpg" class="fr-fic fr-dii"></td></tr></tbody></table></div>';
let re = /<img src="(.*?)"/gi;
let result = HTML.match(re);

з масиву

0: "<img src="htt ps://domain.com/uploads/monthly_2019_11/7/1.png.jpg""
1: "<img src="htt ps://domain.com/uploads/monthly_2019_11/7/9.png.jpg""

0

Якийсь гуглінг підвів мене до цього :

function preg_match (regex, str) {
  return (new RegExp(regex).test(str))
}
console.log(preg_match("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$","test"))
console.log(preg_match("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$","what@google.com"))

Для отримання додаткової інформації див. Https://locutus.io .


0

повернути відповідний рядок назад або false

function preg_match (regex, str) {
  if (new RegExp(regex).test(str)){
    return regex.exec(str);
  }
  return false;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.