js从参数中删除不符合模式的部分


const regex = /[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}/gm;
let m;
while ((m = regex.exec(tweet.text)) !== null) {
let newClass = tweet.text.replace(/[^1-9a-zA-Z]{3}-[^1-9a-zA-Z]{3}-[^1-9a-zA-Z]{3}/g, '');
console.log(`Found match: ${newClass}`);
};

tweet.text = "123.qwe.456 test"时,我仍然得到相同的输出,但我想删除任何不符合模式的内容

/[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}/

有什么想法吗?

您可以使用捕获组来提取字符串中匹配的内容,然后用该值替换原始变量。类似的东西

const regex = /([1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3})/
let match = tweet.text.match(regex)
tweet.text = match[1]

您可以获得匹配而不是替换

b[1-9a-zA-Z]{3}([-.])[1-9a-zA-Z]{3}1[1-9a-zA-Z]{3}b

解释

  • b单词边界
  • [1-9a-zA-Z]{3}匹配3次列出的任何一个(注意1-9与0不匹配(
  • 组1中的([-.])捕获-.
  • [1-9a-zA-Z]{3}匹配3次列出的任何一次
  • 1返回对组1的引用,与组1中捕获的相同匹配
  • [1-9a-zA-Z]{3}匹配3次列出的任何一次
  • bA字边界

Regex演示

const regex = /[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}/gm;
let m;
while ((m = regex.exec(tweet.text)) !== null) {
console.log(`Found match: ${m[0]}`);

找到解决方案

最新更新