两者有什么区别

alert("abc".substr(0,2));

and

alert("abc".substring(0,2));

它们似乎都输出“ab”。


当前回答

编辑:这个答案是参考R编程

以下是substr()和substring()之间的主要区别:

Substr()有参数start和stop,而substring作为参数的第一个和最后一个。 Substr (x, start, stop)

and

substring(text, first, last = 1000000L)

例子

substr("abcdef", start = 2, stop=4)
[1] "bcd"

substring("abcdef", first = 2, last = 4)    
[1] "bcd"

substring函数有一个很大的默认值[1000000L]的'last'参数,所以你可以跳过指定,而substr函数需要你指定stop参数的值。

例子

substr("abcdef", start = 2)
Error in substr("abcdef", start = 2) : 
  argument "stop" is missing, with no default

substring("abcdef", first = 2)
[1] "bcdef"

如果你将substr函数应用到几个开始点或停止点,该函数只使用第一个入口(即停止点1),而substring函数将提取几个可能的字符串。

例子

> substr('abcdef', 1:3, 5)
[1] "abcde"
> substr('abcdef', 1:3, 5:6)
[1] "abcde"
> substr('abcdef', 1, 5:6)
[1] "abcde"
> substring('abcdef', 1:3, 5)
[1] "abcde" "bcde"  "cde"  
> substring('abcdef', 1, 5:6)
[1] "abcde"  "abcdef"
> substring('abcdef', 1:3, 5:6)
[1] "abcde" "bcdef" "cde"  

有人提到使用负索引/零。 substr()和substring()都接受。

例子

> substr('abcdef', -2, 3)
[1] "abc"
> substring('abcdef', -2, 3)
[1] "abc"
> substring('abcdef', 0, 3)
[1] "abc"
> substr('abcdef', 0, 3)
[1] "abc"

使用substr()或substring()进行字符串替换的重要注意事项:

替换的数据需要有与被替换部分相同的字符数。 如果想用不同长度的字符串替换子字符串,可以看看gsub()函数。

附注:我使用的是R版本4.0.4

其他回答

我最近遇到的另一个问题是,在IE 8中,“abcd”.substr(-1)错误地返回“abcd”,而Firefox 3.6则返回“d”。Slice在两者上都能正常工作。

关于这个主题的更多信息可以在这里找到。

主要的区别在于

Substr()允许您指定要返回的最大长度 substring()允许你指定索引,第二个参数不包括在内

substr()和substring()之间还有一些额外的微妙之处,比如相等参数和负参数的处理。还要注意substring()和slice()是相似的,但并不总是相同的。

  //*** length vs indices:
    "string".substring(2,4);  // "ri"   (start, end) indices / second value is NOT inclusive
    "string".substr(2,4);     // "ring" (start, length) length is the maximum length to return
    "string".slice(2,4);      // "ri"   (start, end) indices / second value is NOT inclusive

  //*** watch out for substring swap:
    "string".substring(3,2);  // "r"    (swaps the larger and the smaller number)
    "string".substr(3,2);     // "in"
    "string".slice(3,2);      // ""     (just returns "")

  //*** negative second argument:
    "string".substring(2,-4); // "st"   (converts negative numbers to 0, then swaps first and second position)
    "string".substr(2,-4);    // ""
    "string".slice(2,-4);     // ""

  //*** negative first argument:
    "string".substring(-3);   // "string"        
    "string".substr(-3);      // "ing"  (read from end of string)
    "string".slice(-3);       // "ing"        
  

substr (MDN)的参数为(from, length)。 substring (MDN)的参数为(from, to)。

更新:MDN考虑substr遗留问题。

alert("abc".substr(1,2)); // returns "bc"
alert("abc".substring(1,2)); // returns "b"

你可以记住substring(带i)接受索引,就像另一个字符串提取方法slice(带i)一样。

当从0开始时,可以使用任何一种方法。

编辑:这个答案是参考R编程

以下是substr()和substring()之间的主要区别:

Substr()有参数start和stop,而substring作为参数的第一个和最后一个。 Substr (x, start, stop)

and

substring(text, first, last = 1000000L)

例子

substr("abcdef", start = 2, stop=4)
[1] "bcd"

substring("abcdef", first = 2, last = 4)    
[1] "bcd"

substring函数有一个很大的默认值[1000000L]的'last'参数,所以你可以跳过指定,而substr函数需要你指定stop参数的值。

例子

substr("abcdef", start = 2)
Error in substr("abcdef", start = 2) : 
  argument "stop" is missing, with no default

substring("abcdef", first = 2)
[1] "bcdef"

如果你将substr函数应用到几个开始点或停止点,该函数只使用第一个入口(即停止点1),而substring函数将提取几个可能的字符串。

例子

> substr('abcdef', 1:3, 5)
[1] "abcde"
> substr('abcdef', 1:3, 5:6)
[1] "abcde"
> substr('abcdef', 1, 5:6)
[1] "abcde"
> substring('abcdef', 1:3, 5)
[1] "abcde" "bcde"  "cde"  
> substring('abcdef', 1, 5:6)
[1] "abcde"  "abcdef"
> substring('abcdef', 1:3, 5:6)
[1] "abcde" "bcdef" "cde"  

有人提到使用负索引/零。 substr()和substring()都接受。

例子

> substr('abcdef', -2, 3)
[1] "abc"
> substring('abcdef', -2, 3)
[1] "abc"
> substring('abcdef', 0, 3)
[1] "abc"
> substr('abcdef', 0, 3)
[1] "abc"

使用substr()或substring()进行字符串替换的重要注意事项:

替换的数据需要有与被替换部分相同的字符数。 如果想用不同长度的字符串替换子字符串,可以看看gsub()函数。

附注:我使用的是R版本4.0.4

let str = "Hello World"

console.log(str.substring(1, 3))  // el -> Excludes the last index
console.log(str.substr(1, 3))  // ell -> Includes the last index