如何找到特定单词后的所有文本外观?

时间:2019-05-19 07:54:52

标签: javascript regex string regex-negation regex-group

我得到一个像这样的字符串

str = “Test/hello/filename/12345678/first
Hddhkhd
Hdhal
filename/1212abcd/second”

我想获取“ filename //”后面的所有字符串的数组,我知道在“ /”之后有一个8个字母的单词。

在这种情况下,我想获得一个数组:

strArr = [“12345678”, “1212abcd”]

如何解决此问题?

5 个答案:

答案 0 :(得分:2)

您也可以在匹配/filename后在匹配8次而不是正斜杠或换行符的组中捕获

\bfilename\/([^\/\n]{8})

Regex demo

如果您想匹配8次或更多次,可以改用{8,},或者如果您想匹配1次或更多次,可以使用+

如果您不想匹配空格字符,可以将\n更改为\s

const regex = /filename\/([^\/\n]{8})/g;
const str = `Test/hello/filename/12345678/first
Hddhkhd
Hdhal
filename/1212abcd/second`;
let m;

while ((m = regex.exec(str)) !== null) {
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  console.log(m[1]);
}

答案 1 :(得分:1)

一个正则表达式,捕获紧接在文字“ filename //”之后的8个字符:

/filename\/\/(.{8})/

答案 2 :(得分:1)

尝试先使用此正则表达式:

filename\/\w{8}

然后在此正则表达式的结果中进行切片:

\w{8}$

首先,您将获得:

  

文件名/ 12345678

     

文件名/ 1212abcd

第二,您将得到:

  

12345678

     

1212abcd

答案 3 :(得分:0)

有关说明,请检查此REGEX

var arr = "Test/hello/filename/12345678/first Hddhkhd Hdhal filename/1212abcd/second".match(/(?<=filename\/)(.*?)(?=\/)/g);
console.log(arr)

OR

对于不受支持的Lookbehinds浏览器,请在正则表达式后使用Array#map

var arr = "Test/hello/filename/12345678/first Hddhkhd Hdhal filename/1212abcd/second".match(/filename\/(.*?)\//g).map(i=> i.split('/')[1]);
console.log(arr)

答案 4 :(得分:0)

您可以使用以下代码。它会匹配filename/之后的所有字符,直到遇到另一个/。在数组中找到匹配项后,可以map进行匹配,并用replacefilename/的所有''

let a = /filename\/[^\/]+/g;
let b = 'Test/hello/filename/12345678/first Hddhkhd Hdhal filename/1212abcd/second';
let c = b.match(a).map(x=>x.replace('filename/',''));
console.log(c);