删除从指定位置开始出现的范围
Removing a range starting occurrence with specified place
我需要定义从第4次出现的(_)中删除的文本区域,并保留扩展名。
12_345_678_900_xxxxxxxxxxxxxxx.jpg
之前12_345_678_900.jpg
之后
34_567_890_123_xxxxxxxx_xxxxx_xxxxxxxxxxx.jpg
之前34_567_890_123.jpg
之后
有可能吗?
一种解决方案是找到第n次出现,然后使用子字符串。
var one='12_345_678_900_xxxxxxxxxxxxxxx.jpg'; // 12_345_678_900.jpg
function nth_occurrence (string, char, nth) {
var first_index = string.indexOf(char);
var length_up_to_first_index = first_index + 1;
if (nth == 1) {
return first_index;
} else {
var string_after_first_occurrence = string.slice(length_up_to_first_index);
var next_occurrence = nth_occurrence(string_after_first_occurrence, char, nth - 1);
if (next_occurrence === -1) {
return -1;
} else {
return length_up_to_first_index + next_occurrence;
}
}
}
console.log(one.substring(0,nth_occurrence(one,'_',4))+one.substring(one.indexOf('.')));
当然,用"_"分割,然后连接回您想要的数据:
var str = "12_345_678_900_xxxxxxxxxxxxxxx.jpg";
str = str.split("_").slice(0,4).join("_") + "."+ str.split(".").slice(-1)
console.log(str)
正则表达式非常适合这种场景:
const data1 = '12_345_678_900_xxxxxxxxxxxxxxx.jpg'
const data2 = '34_567_890_123_xxxxxxxx_xxxxx_xxxxxxxxxxx.jpg'
const re = /^([^_]+_[^_]+_[^_]+_[^_]+).*(.jpg)$/;
var test1 = data1.replace(re, '$1$2');
var test2 = data2.replace(re, '$1$2');
试试看:https://jsfiddle.net/648xt3qq/
可能有几种不同的正则表达式方法可以完成任务
也许这对你有用:
function clean() {
var el = document.getElementById('area');
el.value = el.value.replace(/^(.*?_.*?_.*?_.*?)(_.*?)('..*?.*)$/gmi, '$1$3');
}
<form action="">
<textarea cols="50" rows="4" id="area">12_345_678_900_xxxxxxxxxxxxxxx.jpg
34_567_890_123_xxxxxxxx_xxxxx_xxxxxxxxxxx.jpg</textarea><br />
<input type="submit" onclick="clean(); return false;" />
</form>
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- HTML范围:动态设置值属性
- 正在将日期范围选取器的开始日期设置为空
- angular - 过滤开始日期和结束日期在所选月份和年份范围内的所有对象
- 日期选取器日期范围:最大日期的最小日期 = 开始日期 + 1 天
- 如何显示/隐藏范围,具体取决于本地时间是否等于“开始日期”和“结束日期”Jquery之间
- 如何在React日期范围选择器中获取开始和结束日期值
- 如何获取日期和时间范围选择器的开始和结束
- 删除从指定位置开始出现的范围
- 适应谷歌表API Node.js快速开始与我自己的表工作,错误:错误:无法解析范围:类数据!
- 生成范围内不以零开始的随机整数
- 在日期范围内创建的每一行插入日期,从startDate开始,递增到结束日期
- 当我开始打字时,缩小搜索结果的范围
- 变量范围或其他什么?刚开始的JS
- 从开始 - 结束日期和时间 (UTC) 计算出日期范围
- 如何使用 js 从 1 开始的范围内生成随机数
- Angular-flexSlider从特定的幻灯片开始,使用范围中的值不工作
- 在将时间格式从完整日历开始时间转换为c#时间范围时出错