Найти элементы в строке и преобразовать их в теги

131
13 августа 2019, 14:00

есть строка в которой есть ссылки и хештеги. Нужно обернуть эти ссылки в тег <a href=""></a> как и хештеги. Но не пойму почему с ссылкой не корректно работает и один хештег не находит который находится без пробела. Вот мой пример:

var link = /(https?:\/\/|ftp:\/\/|www\.)((?![.,?!;:()]*(\s|$))[^\s]){2,}/gim 
var hashTag = /(^|\s)(#[a-z\d-]+)/ig 
 
function rebaseText(text) { 
  if (typeof text === 'string') { 
    if (text.match(link)) { 
      text = text.replace(link, "$1<a href={$2} class='link'>$2</a>"); 
    } 
    if (text.match(hashTag)) { 
      text = text.replace(hashTag, "$1<a href='https://google.com/search?q=$2' class='hashtag'>$2</a>"); 
    } 
  } 
  return text; 
} 
 
console.log(rebaseText('Hello world!!! https://google.com/ some text http://myweb.com/ lorem #hashTag1#hashTag2 qweqwewqeqweq #hashTag3'));

Answer 1

Решил это так, надеюсь в будущем кому-то пригодиться:

const hashTag = /(^|\s*)(#[a-z_а-і-я\d-]+)/ig; 
const link = /(\b(https?|):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
const newLink = /(^|[^\/])(www\.[\S]+(\b|$))/gim; 
 
function rebaseText(content) { 
  let elementСontent = content.replace(link, "<a href='$1' target='_blank'>$1</a>"); 
  let newContent = elementСontent.replace(newLink, '$1 <a target="_blank" href="http://$2" class="news-link">$2</a>'); 
  if (newContent.match(hashTag)) { 
    newContent = newContent.replace(hashTag, replacer); 
  } 
  return newContent; 
} 
 
function replacer(str, p1, p2) { 
  return `<a target='_blank' href="https://www.google.com/search?q=${encodeURIComponent(p2)}" class='news-link'>${str}</a>`; 
}; 
 
console.log(rebaseText('Hello world http://google.com/ #helloWorld#Tag2 test#tag3 https://google.com/'))

READ ALSO
JSON или БД. Что для чего нужно?

JSON или БД. Что для чего нужно?

Не могу понять как работать с даннымиУ меня есть большой JSON содержащий информацию по товарам

127
Создать массив обьектов

Создать массив обьектов

Имеется объект item который хранит в себе поля name, password и тдЕсть массивы: person_name, person_password в которых лежат имена и пароли

112
Nuxt.js Failed to execute &#39;appendChild&#39; on &#39;Node&#39;

Nuxt.js Failed to execute 'appendChild' on 'Node'

Проблема заключается в том что проект надо перенести на Nuxt и часть кода не работаетА именно от размера экрана надо выполнить не большие манипуляции...

142