someString.match(regexPattern)
. /format_(.*?)/g
, где (.*?)
будет подобранной группой.) Они находятся в согласованных шаблонах. To получить доступ к сопоставленным группам , в каждом из сопоставленных шаблонов вам нужна функция или что-то похожее на итерацию по совпадению . Есть несколько способов сделать это, как показывают многие другие ответы. Большинство других ответов используют цикл while для повторения всех сопоставленных шаблонов , но я думаю, что мы все знаем потенциальные опасности с этим подходом. Необходимо сопоставлять с new RegExp()
, а не только с самим шаблоном, который упоминается только в комментарии. Это связано с тем, что метод .exec()
ведет себя аналогично функции генератора - , он останавливается каждый раз, когда имеется совпадение , но сохраняет его .lastIndex
, чтобы продолжить оттуда следующий .exec()
вызов.
Ниже приведен пример функции searchString
, которая возвращает Array
всех совпадающих паттернов , где каждый match
является Array
со всеми содержащими сопоставленными группами . Вместо использования цикла while я предоставил примеры, используя как функцию Array.prototype.map()
, так и более эффективный способ - используя простой for
-loop.
Они менее эффективны, поскольку они в основном реализуют forEach
-loop вместо более быстрого for
-loop.
// Concise ES6/ES2015 syntax
const searchString =
(string, pattern) =>
string
.match(new RegExp(pattern.source, pattern.flags))
.map(match =>
new RegExp(pattern.source, pattern.flags)
.exec(match));
// Or if you will, with ES5 syntax
function searchString(string, pattern) {
return string
.match(new RegExp(pattern.source, pattern.flags))
.map(match =>
new RegExp(pattern.source, pattern.flags)
.exec(match));
}
let string = "something format_abc",
pattern = /(?:^|\s)format_(.*?)(?:\s|$)/;
let result = searchString(string, pattern);
// [[" format_abc", "abc"], null]
// The trailing `null` disappears if you add the `global` flag
// Performant ES6/ES2015 syntax
const searchString = (string, pattern) => {
let result = [];
const matches = string.match(new RegExp(pattern.source, pattern.flags));
for (let i = 0; i < matches.length; i++) {
result.push(new RegExp(pattern.source, pattern.flags).exec(matches[i]));
}
return result;
};
// Same thing, but with ES5 syntax
function searchString(string, pattern) {
var result = [];
var matches = string.match(new RegExp(pattern.source, pattern.flags));
for (var i = 0; i < matches.length; i++) {
result.push(new RegExp(pattern.source, pattern.flags).exec(matches[i]));
}
return result;
}
let string = "something format_abc",
pattern = /(?:^|\s)format_(.*?)(?:\s|$)/;
let result = searchString(string, pattern);
// [[" format_abc", "abc"], null]
// The trailing `null` disappears if you add the `global` flag
Мне еще предстоит сравнить эти альтернативы с ранее упомянутыми в других ответах, но я сомневаюсь, что этот подход менее эффективен и менее безопасен, чем другие.
как описано в этой теме
Каждый файл в многоуровневом репозитории имеет основной язык. Основной язык такой же, как язык входа пользователя, который создал файл (например, вариант). Если файл будет изменен позже, вы можете изменить только файл на этом языке .
blockquote>Итак, если приложение было развернуто в английской версии chrome, то вы можете развернуть manifest-bundle.zip только из english хром версия