@@ -94,25 +94,27 @@ export default {
94
94
}
95
95
};
96
96
97
+ // Хештеги парсятся после масс меншнов потому что #abc@all
98
+ // будет упоминать всю беседу, а не игнорировать @all
99
+ const hashtagParser = createParser ({
100
+ regexp: / #[a-zа-я ё0-9 _@] + / ig ,
101
+ parseText : (value ) => [{ type: ' text' , value }],
102
+ parseElement : (value , match , isMention ) => [{ type: isMention ? ' text' : ' hashtag' , value }]
103
+ });
104
+
97
105
const massMentionParser = createParser ({
98
106
regexp: / (?:@| \* )(?:(all| everyone| все)| (online| here| здесь| тут))/ ig ,
99
- parseText : ( value ) => [{ type : ' text ' , value }] ,
107
+ parseText: hashtagParser ,
100
108
parseElement : (value , match , isMention ) => [{
101
109
type: isMention ? ' text' : ' massMention' ,
102
110
subtype: match[1 ] ? ' all' : ' online' ,
103
111
value
104
112
}]
105
113
});
106
114
107
- const hashtagParser = createParser ({
108
- regexp: / #[a-zа-я ё0-9 _] + / ig ,
109
- parseText: massMentionParser,
110
- parseElement : (value , match , isMention ) => [{ type: isMention ? ' text' : ' hashtag' , value }]
111
- });
112
-
113
115
const linkParser = createParser ({
114
116
regexp: / ((https? :\/\/ )? ([a-zа-я ё0-9 . \-@ ] + \. ([a-zа-я ё] {2,18} )| (?<localhost>(?<![a-zа-я ё0-9 ] )localhost)| (?<ip>\d {1,3} \. \d {1,3} \. \d {1,3} \. \d {1,3} ))(?<port>:\d {1,5} )? (\/ (\S * [^ . ,!?()"';\n \\ ] )? )? )(?=$ | \s | [^ a-zа-я ё0-9 ] )/ ig ,
115
- parseText: hashtagParser ,
117
+ parseText: massMentionParser ,
116
118
parseElement (value , match , isMention ) {
117
119
const { localhost , port , ip } = match .groups ;
118
120
const isValidIP = ! ip || ! ip .split (' .' ).find ((v ) => v > 255 );
0 commit comments