正则表达式查找所有包含双星号的数字的内容

时间:2018-08-21 21:29:33

标签: javascript regex match

我有这个: const str = "hello **Tom**, it's currently **19h25**. Here is **19** things found during the **last 2 hours** by **John1**"

我需要找到内容中所有出现的内容,并在内容中带有数字的双星号包围。

我希望str.match(regex)返回['19h25', '19', 'last 2 hours', 'john1']。但**Tom**除外,因为内容中没有数字。

我尝试过像/\*{2}(.*\d)\*{2}/g这样的正则表达式,但是它不起作用。

编辑:两个*中都没有星号**

1 个答案:

答案 0 :(得分:2)

您可以使用

/\*{2}([^\d*]*\d[^*]*)\*{2}/g

请参见regex demo

详细信息

  • \*{2}-一个**子字符串
  • ([^\d*]*\d[^*]*)-第1组:
    • [^\d*]*-除数字和*之外的0+个字符
    • \d-一个数字
    • [^*]*-除*以外的0多个字符
  • \*{2}-一个**子字符串

JS演示:

const str = "hello **Tom**, it's currently **19h25**. Here is **19** things found during the **last 2 hours** by **John1**";
const rx = /\*{2}([^\d*]*\d[^*]*)\*{2}/g;
let m, res = [];
while (m = rx.exec(str)) {
   res.push(m[1]);
}
console.log(res);
// or a one liner
console.log(str.match(rx).map(x => x.slice(2).slice(0, -2)));