提问人:user874737 提问时间:3/9/2023 更新时间:3/10/2023 访问量:67
正则表达式在第 n 个“$”分隔符 js 之后获取字符串的特定部分
Regex get specific part of string after the nth "$" delimiter, js
问:
所以我有这个不和谐的命令。
$command这是我的第一条短信 $这是我的第二条短信 $这是我的 第三篇课文 $这是我的第四篇课文
例如,我需要获取第三个文本部分,它应该像这样输出:这是我的第三个文本。删除其他文本。
所以它应该是这样的。
- 获取 $ 的第三次出现。
- 删除文本的其余部分:$command这是我的第一个文本 $ 这是我的第二个文本 $ 和 $ 这是我的第四个文本
- 获取这是我的第三个文本部分。
你如何在正则表达式中做到这一点?我在这里搜索了线程,有些人说使用类似捕获组的东西,但我无法让它工作。
(?:\$){2}(\s.*)
答:
1赞
Unmitigated
3/9/2023
#1
您可以使用 匹配,然后是其他字符。\$[^$]+
$
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);
0赞
fnyger
3/9/2023
#2
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.*?(?=\$)
1赞
The fourth bird
3/10/2023
#3
使用捕获组:
^(?:[^$]*\$){3}\s*([^$]*[^\s$])
解释
^
字符串的开头(?:
非捕获组将作为整体部件重复[^$]*\$
匹配 than 和 以外的可选字符$
$
){3}
关闭非捕获组并重复 3 次\s*
匹配可选的空格字符(
捕获组 1[^$]*
匹配可选字符,而不是$
[^\s$]
匹配非空格字符,而不是$
)
关闭组 1
观看正则表达式演示。
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])
如果支持,则使用后向断言仅获取匹配项:
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])
评论