我有一个从后端收到的字符串,我需要提取标签。标签以以下两种形式之一书写
type 1. #World is a #good #place to #live.
type 2. #World#place#live.
我设法通过以下方式从第一种类型中提取:str.replace(/#(\S*)/g
如何更改第二种格式以空格分隔的标签以及第一种格式?
我基本上希望从
转换格式二 #World#place#live.
到
#World #place #live.
答案 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]+
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(' '));