2016-05-26 3 views
1

У меня есть строка с уценкой в ​​ней. Я пытаюсь удалить все уценки с помощью регулярного выражения, но у меня проблемы с соответствующими ссылками. Вот как далеко я получил:Регулярное совпадение ссылок по ссылке

function stripMarkdown(text) { 
    var str = String(text).replace(/(__|\*|\#)/gm, ''); 
    return str; 
} 

var testStr = '# This is the title. ## This is the subtitle. **some text** __some more text__. [link here](http://google.com)' 

stripMarkdown(testStr); 

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

Желаемый результат:

This is the title. This is the subtitle. some text some more text. link here 
+0

бы это сделать трюк: http://stackoverflow.com/questions/32381742/js-regex-replace- content-of-markdown-link? –

ответ

1

Я пришел с этим регулярным выражением:

(?:__|[*#])|\[(.*?)\]\(.*?\) 

var str = '# This is the title. ## This is the subtitle. **some text** __some more text__. [link here](http://google.com)' 
 

 
document.write(String(str).replace(/(?:__|[*#])|\[(.*?)\]\(.*?\)/gm, '$1'));

+0

Это соответствует пустой ссылке: '() []' ... желаемое поведение? – phillyslick

+2

@BenPolinsky можно изменить его на '(?: __ | [* #]) | \ [(. +?) \] \ (. +? \)' Если необходимо, но пустая ссылка - это стиль ссылки, isn Не так ли? : p –

+1

Так оно и есть. :) Право, конечно. – phillyslick

0

Попробуйте это:

function stripMarkdown(text) { 
 
    var str = String(text).replace(/__|\*|\#|(?:\[([^\]]*)\]\([^)]*\))/gm, '$1'); 
 
    return str; 
 
} 
 

 
var testStr = '# This is the title. ## This is the subtitle. **some text** __some more text__. [link here](http://google.com)' 
 

 
document.write(stripMarkdown(testStr));

Он заменяет матч с первой группой захвата, которая является текст ссылки. Если совпадение является чем-то другим, кроме ссылки (markdown), это пусто.

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