November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Thursday, November 30th, 2006 03:05 pm
Дано: ASP/JScript.
Задача: выделить из строки первые три слова.

Пишем регулряное выражение:
var re = new RegExp("^(\\s*(\\S+\\s+){3})" , "")
str = str.replace(re, "$1")

Индейская национальная изба.

Целый час бился, и так, и эдак - ну не матчится, хоть тресни.
В конце концов оказалось, что по-майкрософтовски это надо писать так:
"^(\\s*(\\S+\\s+){3}).*"
или так:
"^(\\s*(\\S+\\s+){3}).*$"

С последними тремя словами все еще хуже. Это только так:
".*((\\s+\\S+){3}\\s*)$"

А вот так уже не:
"((\\s+\\S+){3}\\s*)$"
И что самое смешное, вот так тоже не:
"^.*((\\s+\\S+){3}\\s*)$"

Ну и как их после этого не назвать пиненатуралами?
Thursday, November 30th, 2006 06:37 pm (UTC)
Возможно, дело в (positive|negative) (lookahead|lookbehind).
Thursday, November 30th, 2006 08:09 pm (UTC)
Не понял. какой lookahead|behind? Как выражение с привязкой к началу строки может перестать матчиться от того, что у него в конце убрали .* ?
Friday, December 1st, 2006 06:21 am (UTC)
Есть там всякие (?=), (?<=)
Как-то так (http://msdn2.microsoft.com/en-us/library/ms972966.aspx#regexnet_topic13).
Friday, December 1st, 2006 12:06 am (UTC)
Это Вы просто устали. Ну или подзабыли, что делает replace в этом языке.

Первый регекс работал. Заменял первые три слова на первые три слова, оставшуюся часть не трогал. Соответственно, изменений в строке не было.

Последние два регекса заменяют первые три слова ПЛЮС ВЕСЬ ОСТАТОК СТРОКИ на первые три слова. Что и требовалось (видимо).

Такие дела.
Friday, December 1st, 2006 08:23 am (UTC)
+1, зачем для выделения пользоваться заменой?