【问题标题】:Replace strings from left until the first occuring string in Javascript从左侧替换字符串,直到 Javascript 中第一个出现的字符串
【发布时间】:2014-08-05 05:06:02
【问题描述】:

我想弄清楚如何替换示例:

sw1_code1_number1_jpg --> code1_number1_jpg
hon2_noncode_number2_jpg --> noncode_number2_jpg
ccc3_etccode_number3_jpg --> etccode_number3_jpg
ddd4_varcode_number4_jpg --> varcode_number4_jpg

所以结果都是第一个_之后的字符串 如果它没有找到任何 _ 则什么也不做。

我知道如何查找和替换字符串、str.replace、indexof、lastindexof,但不知道如何删除直到找到的第一个匹配项。

谢谢

【问题讨论】:

标签: javascript replace


【解决方案1】:

replace 方法与正则表达式一起使用:

"sw1_code1_number1_jpg".replace(/^.*?_/, "");

【讨论】:

  • 考虑这个修改过的正则表达式:/^.*?_/,如果字符串以_开头。
  • 致 OP:请注意 ? 元字符用于非贪婪匹配的重要性 - .*? 不会像 (.*)? 那样做,这些是完全不同的用途。跨度>
【解决方案2】:

您可以采取多种方法:

var str = 'sw1_code1_number1_jpg';
var arr = str.split('_');
arr.shift();
var newSfr = arr.join('_');

或者你可以使用切片或替换:

var str = 'sw1_code1_number1_jpg';
var newStr = str.slice(str.indexOf('_')+1);

或者

var newStr = 'sw1_code1_number1_jpg'.replace(/^[^_]+_/,'');

【讨论】:

  • 切片演示不适用于您提供的示例以外的其他示例,因为它不搜索“_”的索引
  • 我并不是要烦人,但您应该在 indexOf 的结果中添加一个,因为您不想包含下划线
  • 你是绝对正确的。感谢您容忍我的错误。 ---- +1
  • 哇,效果很好。谢谢大家的回复,这真的帮助我完成了任务。只是超级超级帮助。
  • @ErjonG。很高兴我能有所帮助。享受吧!
【解决方案3】:

您可以拆分字符串并获得slice

var str = 'sw1_code1_number1_jpg';
var finalStr = str.split('_').slice(1).join('_') || str;

如果您的原始字符串不包含下划线,则返回原始字符串。


更新一个更简单的slice(仍然适用于不包含下划线的字符串)

var str = 'sw1_code1_number1_jpg';
var finalStr = str.slice(str.indexOf('_') + 1);

这在所有情况下都有效,因为当没有找到下划线时,-1 被返回,并且当我们将 1 加到我们称为str.slice(0) 的索引中时,它等于 str。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2011-12-19
    • 2014-03-21
    • 2020-05-22
    • 2022-12-05
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多