Regex Match строка после ключевого слова в скобках - PullRequest
0 голосов
/ 02 мая 2019

Мне нужно сопоставить значение после ключевого слова между двойными кавычками например:

zoom_sensitivity "2"
sensitivity "99"
m_rawinput "0"
m_righthand "0"

также с разным интервалом:

sensitivity"99"m_rawinput"0"zoom_sensitivity"2"m_righthand"0"

другой пример:

sensitivity"99" m_rawinput "0"
m_righthand "0"
zoom_sensitivity"2"

Я хочу получить 99 значение в обоих сценариях после чувствительности ключевого слова или выбранного

То, что я попробовал, это: [\n\r]*["|\n\r\s]sensitivity\s*"([^\n\r\s]*)"

, но оно не совпадает, если ключевое слово находится в первой строке или перед любым пробелом / двойной кавычкой, и со встроенным кодом оно соответствует больше, чем просто значение 99 . Я полагаю, что Source Engine анализирует его по своим файлам .cfg и, возможно, есть лучший способ.

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Вы можете использовать это регулярное выражение и захватить ваши цифры из группы 1,

\bsensitivity\s*"(\d+)"

Поскольку вы хотите выбрать 99, который следует только после sensitivity в качестве целого слова, необходимо использовать границы слова \b, окружающие слово, например \bsensitivity\b и \s* позволяют сопоставлять необязательные пробелы между словом затем " соответствует двойной кавычке, затем (\d+) соответствует одной или нескольким цифрам и захватывает в group1, и, наконец, " соответствует закрывающей двойной кавычке.

Regex Demo

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

Вы можете использовать это просто:

(\w+)\s?"(\d+)"

Какие выходы

zoom_sensitivity "2"    zoom_sensitivity    2
sensitivity "99"        sensitivity         99
m_rawinput "0"          m_rawinput          0
m_righthand "0"         m_righthand         0
sensitivity"99"         sensitivity         99
m_rawinput"0"           m_rawinput          0
zoom_sensitivity"2"     zoom_sensitivity    2
m_righthand"0"          m_righthand         0
sensitivity"99"         sensitivity         99
m_rawinput "0"          m_rawinput          0
m_righthand "0"         m_righthand         0
zoom_sensitivity"2"     zoom_sensitivity    2

Для этого:

zoom_sensitivity "2"
sensitivity "99"
m_rawinput "0"
m_righthand "0"
also with different spacing:

sensitivity"99"m_rawinput"0"zoom_sensitivity"2"m_righthand"0"
another example:

sensitivity"99" m_rawinput "0"
m_righthand "0"
zoom_sensitivity"2"

Вы можете поставитьэто в объект, а затем запросить этот объект позже:

var parse = function(content) {
  var myregexp = /(\w+)\s*"(\d+)"/mg;
  var match = myregexp.exec(content);
  while (match != null) {
    // matched text: match[0]
    // match start: match.index
    // capturing group n: match[n]
    console.log(match[1] + " => " + match[2]);
    // re-run the regex for the next item
    match = myregexp.exec(content);
  }
}

parse(document.getElementById("example1").innerHTML);
console.log("-----------");
parse(document.getElementById("example2").innerHTML);
console.log("-----------");
parse(document.getElementById("example3").innerHTML);
<div id="example1">
zoom_sensitivity "2"
sensitivity "99"
m_rawinput "0"
m_righthand "0"
</div>

<div id="example2">
sensitivity"99"m_rawinput"0"zoom_sensitivity"2"m_righthand"0"
</div>

<div id="example3">
sensitivity"99" m_rawinput "0"
m_righthand "0"
zoom_sensitivity"2"
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...