javascript 正则表达式获取第n个“$”分隔符后的字符串特定部分,js

cx6n0qe3  于 2023-03-11  发布在  Java
关注(0)|答案(3)|浏览(142)

所以我有这个作为不和谐的命令。
$command这是我的第一个文本$这是我的第二个文本$这是我的第三个文本$这是我的第四个文本
例如,我需要获取第三个文本部分,它应该输出如下:这是我的第三个文本。删除其他文本。
所以应该是这样的。
1.获取第三个出现的**$
1.删除文本的其余部分:
$命令这是我的第一个文本$这是我的第二个文本$$这是我的第四个文本**
1.得到这是我的第三个文本部分。
在regex中如何做到这一点?我搜索了这里的线程,有些人说要使用类似捕获组的东西,但我无法使其工作。

(?:\$){2}(\s.*)
insrf1ej

insrf1ej1#

您可以使用\$[^$]+来匹配后跟其他字符的$

let s = '$command this my first text $ this is my second text $ this is my third text $ this is my fourth text';
let res = s.match(/(?:\$[^$]+){2}\$([^$]+)/)[1].trim();
console.log(res);
afdcj2ne

afdcj2ne2#

使用捕获组:

^(?:[^$]*\$){3}\s*([^$]*[^\s$])

说明

  • ^字符串开始
  • (?:非捕获组作为整个部分重复
  • [^$]*\$匹配$以外的可选字符,然后匹配$
  • ){3}关闭非捕获组并重复3次
  • \s*匹配可选空白字符
  • (捕获组1
  • [^$]*匹配$以外的可选字符
  • [^\s$]匹配$以外的非空白字符
  • )关闭组1

参见regex demo

const s = "$command this my first text $ this is my second text $ this is my third text $ this is my fourth text";
const regex = /^(?:[^$]*\$){3}\s*([^$]*[^\s$])/;
const m = s.match(regex);
if (m) console.log(m[1])

如果是supported,则使用lookbehindAssert仅获取匹配:

const s = "$command this my first text $ this is my second text $ this is my third text $ this is my fourth text";
const regex = /(?<=^(?:[^$]*\$){3}\s*)[^\s$](?:[^$]*[^\s$])?/;
const m = s.match(regex);
if (m) console.log(m[0])
5fjcxozz

5fjcxozz3#

let s = '$command this my first text $ this is my second text $ this is my third text $ this is my fourth text';
let res = s.match(/(?<=((?<=\$).*?\$){2}) this is my.*?(?=\$)/)[0];
console.log(res);

库应该接受正向前看和向后看,因此您可以尝试以下操作:

(?<=((?<=\$).*?\$){2}) this is my.*?(?=\$)

相关问题