JavaScript извлекает хештеги из строк - PullRequest
0 голосов
/ 19 января 2019

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

type 1. #World is a #good #place to #live.
type 2. #World#place#live.

Мне удалось извлечь из первого типа: str.replace(/#(\S*)/g как я могу изменить второй формат на разделенные пробелами теги, а также формат один?

В основном я хочу, чтобы формат два был преобразован из

 #World#place#live.

в

 #World #place #live.

Ответы [ 3 ]

0 голосов
/ 19 января 2019

Как насчет того, чтобы использовать регулярное выражение /#([\w]+\b)/gm и объединить пробел , как показано ниже, чтобы извлечь #hastags из вашей строки? ИЛИ вы можете использовать str.replace(/\b#[^\s#]+/g, " $&"), как прокомментировал @ Wiktor

function findHashTags(str) {  
    var regex = /#([\w]+\b)/gm;
    var matches = [];
    var match;

    while ((match = regex.exec(str))) {
        matches.push(match[0]);
    }
    return matches;
}
let str1 = "#World is a #good #place to #live."
let str2 = "#World#place#live";
let res1 = findHashTags(str1);
let res2 = findHashTags(str2);
console.log(res1.join(' '));
console.log(res2.join(' '));
0 голосов
/ 19 января 2019

Образец #(\S*) будет соответствовать #, за которым 0+ раз будет непробельный символ в захваченной группе. Это также будет соответствовать одному #. Строка #World#place#live. не содержит пробельных символов, поэтому вся строка будет сопоставлена.

Вместо этого вы можете сопоставить их, используя отрицательный класс символов. Соответствие #, за которым следует класс отрицанных символов, который не соответствует ни #, ни пробелу.

#[^#\s]+

Regex demo

const strings = [
  "#World is a #good #place to #live.",
  "#World#place#live."

];
let pattern = /#[^#\s]+/g;

strings.forEach(s => {
  console.log(s.match(pattern));
});
0 голосов
/ 19 января 2019

Вы можете использовать String.match , с регулярным выражением #\w+:

var str = `
type 1. #World is a #good #place to #live.
type 2. #World#place#live.`

var matches = str.match(/#\w+/g)

console.log(matches)

\w+ соответствует любому символу слова [a-zA-Z0-9_] более одного раза, поэтому вы можете настроить его.

Как только у вас есть совпадения в массиве, вы можете изменить их в соответствии с вашими предпочтениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...