RegEx для ввода слов в скобках - PullRequest
0 голосов
/ 24 мая 2019

Это мое регулярное выражение:

/(\(-caramel-\)|\(-vanilla-\)|)/

С этим выражением регулярного выражения, он будет обнаруживать только first string , что (-caramel-) only

Как обнаружить все (-caramel-) и (-vanilla-) в строке?

Это мой пример строки:

(-caramel-) John Cina (-vanilla-)(-caramel-)2019-05-19 07:31:05(-vanilla-)

Как мне решить эту проблему?

1 Ответ

1 голос
/ 24 мая 2019

Если мы хотим, чтобы в нашем поиске были слова с ошибками, мы могли бы сделать это, используя список символов, ограниченный слева и справа символом (), возможно, похожим на:

\([carmel-]+\)|\([vanila-]+\)

enter image description here

DEMO

RegEx

Если это выражение нежелательно, его можно изменить или изменить в regex101.com .

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

Тест

$re = '/\([carmel-]+\)|\([vanila-]+\)/m';
$str = '(-caramel-) John Cina (-vanilla-)(-caramel-)2019-05-19 07:31:05(-vannila-)';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

Демо

Этот фрагмент показывает, что если выражение работает:

const regex = /\([carmel-]+\)|\([vanila-]+\)/gm;
const str = `(-caramel-) John Cina (-vanilla-)(-caramel-)2019-05-19 07:31:05(-vannila-)`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
...