Match подход
С match
, это гораздо проще, просто использовать /hello\s+\S+/g
:
var str = "hello 1 test test hello 2";
var patt = /hello\s+\S+/g;
var res = str.match(patt);
if(res!=null) {
for(var i=0;i<res.length;i++)
console.log(i+res[i]);
}
Обратите внимание, что вам не нужны какие-либо захватив группы в этом случае, как вы не используя захваченный текст, вам нужен весь согласованный текст. Кроме того, \s+
будет соответствовать любому пробелу между hello
и последовательностью символов без пробелов.
Split подход
Вы должны соответствовать остальной части строки, которая после hello \S+
и удалить пустые записи перед выводом их:
var str = "hello 1 test test hello 2";
var patt = /(hello \S+).*?(?=$|hello \S)/g;
var res = str.split(patt);
//var res = str.search(patt);
if(res!=null) {
res = res.filter(Boolean);
for(var i=0;i<res.length;i++)
if (res[i]) {
console.log(i+res[i]);
}
}
Результат:
0hello 1
js:21 1hello 2
Регулярное выражение - (hello \S+).*?(?=$|hello \S)
- сопоставляет и фиксирует hello
+ последовательность символов без пробелов, а затем любые символы, кроме строки новой строки, до конца строки или следующего hello
+ символы без пробелов.
Я использовал res.filter(Boolean);
для удаления пустых элементов в результирующем массиве (который почти всегда присутствует при расщеплении с регулярным выражением).
Это! Спасибо друг! Я помечаю ответ как завершенный после 8 минут более – marius
Спасибо. Если вы используете регулярное выражение много, инструмент, который я часто использую, и найти очень полезным, это [Regexr] (http://www.regexr.com) – MetalMichael