如何在模式之前或之前截断字符串?
假设我有一个字符串"abcdef"
我需要在"abc"
之后截断所有内容,因此输出将为:
def
如果我说在"def"
之前截断,则输出应为:
abc
以下是我尝试的代码
var str1 = "abcdefgh";
var str2 = str1.substr(str1.indexOf("abc"), str1.length);
console.log(str2);
我没有得到输出。
我被困在这里任何帮助将不胜感激。
答案 0 :(得分:4)
你需要传递“abc”的长度作为substr方法的第二个参数
var str1 = "abcdefgh";
var pattern = "abc";
var str2 = str1.substr(str1.indexOf(pattern), pattern.length); <-- check this line
console.log(str2);
但是,上面的代码可能会为字符串中不存在的模式返回意外结果。
var str1 = "abcdefgh";
var pattern = "bcd";
var str2 = "";
if(str1.indexOf(pattern)>=0) //if a pattern is not present in the source string indexOf method returns -1
{
//to truncate everything before the pattern
//outputs "efgh"
str2 = str1.substr(str1.indexOf(pattern)+pattern.length, str1.length);
console.log("str2: "+str2);
// if you want to truncate everything after the pattern & pattern itself
//outputs "a"
str3 = str1.substr(0, str1.indexOf(pattern));
console.log("str3: "+str3);
}
答案 1 :(得分:4)
var str = "sometextabcdefine";
var pattern = "abc";
var truncateBefore = function (str, pattern) {
return str.slice(str.indexOf(pattern) + pattern.length);
};
var truncateAfter = function (str, pattern) {
return str.slice(0, str.indexOf(pattern));
}
console.log(truncateBefore(str, pattern)); // "define"
console.log(truncateAfter(str, pattern)); // "sometext"
答案 2 :(得分:0)
这样的事情怎么样:
function truncateAfter(original, pattern) {
return original.substring(0, original.indexOf(pattern) + pattern.length);
}
这样做是找到你正在寻找的模式的第一个索引,并返回原始字符串的子字符串,该字符串从模式的第一个实例开始到结尾。
示例用法:
truncateAfter('dabcdefghi', 'abc');
>> 'dabc'
如果你想要在你正在寻找的模式之前和之后截断输出,只是检查模式是否在字符串中,然后使用模式作为输出是你正在寻找的?
function truncate(original, pattern) {
if (original.indexOf(pattern) != -1) {
return pattern;
}
}
示例用法:
truncate('dabcdefghi', 'abc');
>> 'abc'
答案 3 :(得分:0)
请参阅以下代码:
var str1 = "abcdefgh";
var str2 = str1.substr(str1.indexOf("abc")+3, str1.length);
alert(str2);
你是对的,但你错过的一件事是在indexOf中做+3。 indexOf(“abc”)将返回0,这反过来将再次给你整个字符串。
或查看这个小提琴链接: