1
0
mirror of https://github.com/hotomoe/hotomoe synced 2024-11-29 07:18:13 +09:00

[MFM] Better URL parsing

This commit is contained in:
syuilo 2018-11-16 21:30:01 +09:00
parent da10ba3fea
commit e3b8495431
No known key found for this signature in database
GPG Key ID: BDC4C49D06AB9D69
2 changed files with 33 additions and 6 deletions

View File

@ -9,9 +9,11 @@ export type TextElementUrl = {
};
export default function(text: string) {
const match = text.match(/^https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.=\+\-]+/);
const match = text.match(/^https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.,=\+\-]+/);
if (!match) return null;
const url = match[0];
let url = match[0];
if (url.endsWith('.')) url = url.substr(0, url.lastIndexOf('.'));
if (url.endsWith(',')) url = url.substr(0, url.lastIndexOf(','));
return {
type: 'url',
content: url,

View File

@ -160,12 +160,37 @@ describe('Text', () => {
});
it('url', () => {
const tokens = analyze('https://himasaku.net');
const tokens1 = analyze('https://example.com');
assert.deepEqual([{
type: 'url',
content: 'https://himasaku.net',
url: 'https://himasaku.net'
}], tokens);
content: 'https://example.com',
url: 'https://example.com'
}], tokens1);
const tokens2 = analyze('https://example.com.');
assert.deepEqual([{
type: 'url',
content: 'https://example.com',
url: 'https://example.com'
}, {
type: 'text', content: '.'
}], tokens2);
const tokens3 = analyze('https://example.com/foo?bar=a,b');
assert.deepEqual([{
type: 'url',
content: 'https://example.com/foo?bar=a,b',
url: 'https://example.com/foo?bar=a,b'
}], tokens3);
const tokens4 = analyze('https://example.com/foo, bar');
assert.deepEqual([{
type: 'url',
content: 'https://example.com/foo',
url: 'https://example.com/foo'
}, {
type: 'text', content: ', bar'
}], tokens4);
});
it('link', () => {