2013-07-18 5 views
4

Что выглядит регулярное выражение для соответствия только первому экземпляру запятой и ничего, кроме этой запятой?Regex для сопоставления только первого появления запятой в каждой строке

Я пробовал такие вещи, как ,{1}, и я думаю, что это как-то связано с не-жадными классификаторами, такими как ,(.*?), но я не имел успеха.

Я использую Notepad ++, чтобы попытаться преобразовать код с другого языка на JavaScript. Я хочу превратить первую запятую в двоеточие. Это выглядит следующим образом:

'TJ', 'Tajikistan' , 
'TZ', 'Tanzania' , 
'TH', 'Thailand' , 
'TL', 'Timor-Leste' , 
'TG', 'Togo' , 
'TK', 'Tokelau' , 
'TO', 'Tongo' , 
'TT', 'Trinidad and Tobago' , 

Найти что: /,/
Заменить: :
0 вхождений были заменены

Screnshot of Notepad++

+1

Просто используйте '/, /', без '/ g'? – Qtax

+0

Работает регулярное выражение. Поэтому следуйте советам Qtax –

+4

, почему бы не 'string.indexOf (',')'? – acdcjunior

ответ

13

Что вы можете сделать, вместо того, чтобы просто заменить первую запятую с двоеточием, вы можете автоматически заменить запятую и все после нее с двоеточием plus everythi ng, который был после запятой. (Например, в 'TZ', 'Tanzania' , этот подход заменит , 'Tanzania' , на : 'Tanzania' ,.) После этого, поскольку остальная часть строки уже прошла замену, Notepad ++ не пересматривает ее, чтобы увидеть, содержит ли она запятую.

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

В частности, вы бы заменить это ("Найти"):

,(.*) 

означает "запятая (,), плюс ноль или более символов (.*), а также захватить последний (())", с этим («Заменить»):

:$1 

означает «двоеточие (:), плюс то, что было захвачено в первой группе захвата ($1)».

+0

блестящий. как это работает? – Parseltongue

+3

@Parseltongue: в регулярном выражении '(. *)' Означает «ноль или больше символов не-новой строки» и «захватывать» их (т. Е. Запомнить их для последующей ссылки) ». В заменяющей строке '$ 1' означает« материал, который вы захватили ». (Если у вас есть несколько наборов '(...) ', то вы также можете иметь' $ 2', '$ 3' и т. д.) Таким образом, это работает путем замены запятой, а также остальной части строки, с двоеточием, плюс остальная часть строки. После этого, поскольку остальная часть строки уже претерпела замену, Notepad ++ не пересматривает ее, чтобы увидеть, содержит ли она запятую. – ruakh

+0

Thnaks так много для объяснения – Parseltongue

Смежные вопросы