2015-11-29 3 views
0

Regex exampleRegex wrapping word

Как я могу исключить первое место в каждом матче?

То же самое регулярное выражение: (?:^|\W)#(\w+)(?!\w)

+0

Возможный дубликат [Использование регулярных выражений для удаления первого появления пустого пространства, а затем заменить остальные вкладки с запятыми] (http://stackoverflow.com/questions/2975490/using-regex-to-remove-the-first-occurrence-of-white-space-and-then-replace-the-r) –

+0

Что вы означает «исключить первое пространство в каждом матче». Вы хотите совместить не-слово в качестве первого символа _except_ white пространство ? – sln

+0

Ну, это будет '[^ \ w \ s]? # (\ W +) \ b' – sln

ответ

1

Это то, что вы ищете?
http://regexr.com/3ca98

Из информации, которую вы не дали нам до сих пор, это регулярное выражение должно быть достаточно: #(\w+)(?!\w).
Но, может быть, есть нечто большее, чем мы знаем. Что вы хотели достичь с помощью (?:^|\W)?

Edit: Думая о том, что вы, вероятно, хотите достичь, это произошло со мной, что вы могли бы соответствовать только вашему шаблону, если он не в середине другого слова (например test#case). Вы, вероятно, не хотите, чтобы это соответствовало.
Чтобы исключить такие случаи, вы должны убедиться, что перед ним есть какой-то символ пробела или, другими словами: ничего, кроме символов пробелов или ничего.

Я предполагаю, что вы используете javascript, потому что regexr.com делает и, к сожалению, не существует регулярных выражений, доступных в реализации регулярных выражений javascript. Таким образом, нет реальной возможности убедиться, что перед вашим шаблоном нет ничего или пробелов.
Одним из решений было бы работать с группами захвата. Возьмите это регулярное выражение:
(?:^|\s+)(#\w+)

Он ищет одного или несколько пробельных символы или linestarts в передней части вашего рисунка, но не использует захват группы для этого. Затем ваш шаблон вверх, и это первая группа захвата во всем выражении.

Чтобы использовать это в javascript сейчас, вам необходимо создать экземпляр объекта RegExp и использовать его функцию exec до тех пор, пока не будет больше совпадений и сохраните первую группу захвата в массив результатов.

JS код:

var txt = text.innerHTML; 
var re = /(?:^|\s+)(#\w+)/g; 
var res = []; 
var tmpresult = []; 
while ((tmpresult = re.exec(txt)) !== null) { 
    res.push(tmpresult[1]); // push first capture group to result stack 
} 
result.innerHTML = JSON.stringify(res, null, 2); 

JSFiddle: https://jsfiddle.net/j41tw4hm/1/
Обновлено regexr.com: http://regexr.com/3ca9n