2016-01-22 2 views
0

у меня есть это регулярное выражение:Выберите символ, если какой-то символ из списка перед символом

/([a-záäéěíýóôöúüůĺľŕřčšťžňď])-$\s*/gmi 

Это регулярное выражение выбирает C- из моего текста:

sme! a Želiezovce 2015: Spoloíč- 
ne pre Európu. Oslávili aj 940. 

Но я хочу для выбора только - (без č) (если какой-либо символ из списка [a-záäéěíýóôöúüůĺľŕřčšťžňď] до -).

ответ

0

В других языках вы бы использовать lookbehind

/(?<=[a-záäéěíýóôöúüůĺľŕřčšťžňď])-$\s*/gmi 

Это соответствует -$\s* только если он предшествует одному из символов в списке.

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

var match = /[a-záäéěíýóôöúüůĺľŕřčšťžňď](-$\s*)/gmi.match(string); 

При использовании этого match[1] будет содержать часть строки, начиная с дефисом.

+0

JS не имеет просмотра назад. – Oriol

+0

@ Ориол Я думал, что у меня просто не было отрицательного взгляда, я думаю, я забыл. – Barmar

0

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

/[a-záäéěíýóôöúüůĺľŕřčšťžňď](-)$\s*/gmi

бы вернулись следующие матчи для вас строки: ["č-", "-"], так что вы можете извлечь определенные данные, вам нужно от вашего матча.

Кроме того, $ символ указывает на регулярное выражение в конце линии, и вы используете флаг многострочного, так что технически эта часть \s* просто игнорируется, как ничто не может появиться в строке после окончания.

Правильное регулярное выражение должно быть /[a-záäéěíýóôöúüůĺľŕřčšťžňď](-)$/gmi

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