javascript从字符串中提取主题标签

时间:2019-01-19 12:23:10

标签: javascript regex

我有一个从后端收到的字符串,我需要提取标签。标签以以下两种形式之一书写

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 :(得分:1)

您可以将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_]都匹配多次,因此您可能需要对其进行调整。

一旦将匹配项排列在一个数组中,就可以将其重新排列为喜欢的内容。

答案 1 :(得分:1)

模式#(\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));
});

答案 2 :(得分:0)

如何使用正则表达式/#([\w]+\b)/gm并按如下所示通过空格连接以从字符串中提取#hastags呢? ,您可以使用由{em> @Wiktor

评论的str.replace(/\b#[^\s#]+/g, " $&")

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(' '));