gpt4 book ai didi

javascript - 如果存在,则在字符第 3 次出现后替换所有内容

转载 作者:行者123 更新时间:2023-11-30 08:51:04 25 4
gpt4 key购买 nike

这是我正在尝试做的事情:

给定一个字符串,如果该字符串以“/plan”开头,我想删除第三次出现“/”字符之后的所有内容——假设有第三次出现,但可能没有。如果它以“/plan”开头,但少于 3 个“/”字符,则正则表达式应按原样返回字符串。

此外,如果字符串不是以“/plan”开头,则可以按原样返回该字符串。以下是一些示例输入和输出:

"" returns ""
"/foo" return "/foo"
"/plan/123" returns "/plan/123"
"/plan/123/4567" returns "/plan/123"
"/plan/123/4567/89010" returns "/plan/123

理想情况下,我希望完全通过正则表达式来完成此操作,但考虑到一些要求,我意识到这可能并不容易完成。

最佳答案

下面是使用正则表达式和replace的方法:

var str = /* ... */;
str = str.replace(/^(\/plan\/[^\/]+)\/.*$/, '$1');

这样做:

  1. 捕获:
    • 在字符串开头匹配/plan
    • ...后跟/
    • ...后跟一个或多个非/
  2. 匹配以下 / 后跟字符串结尾的任何内容
  3. 用第一个捕获组替换完整匹配

(如果没有匹配,就没有替代品。)

测试:Live Copy | Source

var tests = [
{test: "", expect: ""},
{test: "/foo", expect: "/foo"},
{test: "/plan/123", expect: "/plan/123"},
{test: "/plan/123/4567", expect: "/plan/123"},
{test: "/plan/123/4567/89010", expect: "/plan/123"}
];

var index, test, result;
for (index = 0; index < tests.length; ++index) {
test = tests[index];
result = test.test.replace(/^(\/plan\/[^\/]+)\/.*$/, '$1');
if (result === test.expect) {
display("OK: " + test.test + " => " + result);
}
else {
display("FAIL: " + test.test + " => " + result);
}
}

结果:

OK: =>OK: /foo => /fooOK: /plan/123 => /plan/123OK: /plan/123/4567 => /plan/123OK: /plan/123/4567/89010 => /plan/123

关于javascript - 如果存在,则在字符第 3 次出现后替换所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17816722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com