Вы будете иметь проблемы с решением всей этой проблемы с помощью регулярных выражений.
не
То есть, нет регулярное выражение, которое будет делать все из следующих действий:
- выберите ничего, пока вы не заинтересованы в
- захвата все, что вы заинтересованы в
- захвата переменное количество совпадений
Последнее требование - переменное количество захватов - большое. Пользователь StackOverflow Tomalak described the situation quite well:
Группы определяются круглыми скобками. Результат вашего совпадения будет содержать столько групп, сколько в круглых скобках будет содержать пары круглых скобок (кроме измененных круглых скобок, таких как (?: ...), которые не будут учитываться в группах соответствия). Хотите два отдельных групповых матча в вашем результате матча? Определите две отдельные группы в вашем регулярном выражении.
Если группа может совпадать несколько раз, значение группы будет соответствовать последнему. Все предыдущие совпадения для этой группы будут отменены последним совпадением.
Вы все еще можете позволить регулярному выражению делать много работы, хотя, например, с использованием \b
краевыми из-слов якоря. Это очень похоже на то, что вы описывали как «пространство до и после него», но ближе к тому, что вы хотите, потому что оно не соответствует (или даже требует) самого пространства.
> "R I O T".match(/\b\w\b/g)
["R", "I", "O", "T"]
> "FrankerZ R FrankerZ I FrankerZ O FrankerZ T".match(/\b\w\b/g)
["R", "I", "O", "T"]
Вы хотели квантификации, и, конечно, это регулярное выражение не содержит кванторов:
> "test a b test".match(/\b\w\b/g)
["a", "b"]
Но вы можете сделать это за пределами регулярного выражения:
var individual_letters_re = /\b\w\b/g;
function hiddenWord(sentence) {
letters = sentence.match(individual_letters_re);
if (letters && letters.length >= 3) {
return letters.join("");
}
return "";
}
> hiddenWord("R I O T")
"RIOT"
> hiddenWord("FrankerZ R FrankerZ I FrankerZ O FrankerZ T")
"RIOT"
> hiddenWord("test a b test")
""
> hiddenWord("test a b c test")
"abc"
Разве это не просто дало бы мне все однобуквенные слова? Что, если кто-то скажет: «Это тест, RIOT», он даст вам «a, r, i, o, t» », поэтому я хочу, чтобы он начинал захватывать, когда есть 3+ экземпляра одиночных букв подряд. Любая идея, как я буду включать это в код, который вы написали? – Flipybitz