Skip to content
instance method

String#index

(::Regexp | ::string pattern, ?::int offset) -> ::Integer?
index(pattern, offset = 0) → integer or nil

Returns the integer position of the first substring that matches the given argument pattern, or nil if none found.

When pattern is a string, returns the index of the first matching substring in self:

Example
'foo'.index('f')         # => 0
'foo'.index('o')         # => 1
'foo'.index('oo')        # => 1
'foo'.index('ooo')       # => nil
'тест'.index('с')        # => 2  # Characters, not bytes.
'こんにちは'.index('ち')  # => 3

When pattern is a Regexp, returns the index of the first match in self:

Example
'foo'.index(/o./) # => 1
'foo'.index(/.o/) # => 0

When offset is non-negative, begins the search at position offset; the returned index is relative to the beginning of self:

Example
'bar'.index('r', 0)        # => 2
'bar'.index('r', 1)        # => 2
'bar'.index('r', 2)        # => 2
'bar'.index('r', 3)        # => nil
'bar'.index(/[r-z]/, 0)    # => 2
'тест'.index('с', 1)       # => 2
'тест'.index('с', 2)       # => 2
'тест'.index('с', 3)       # => nil  # Offset in characters, not bytes.
'こんにちは'.index('ち', 2) # => 3

With negative integer argument offset, selects the search position by counting backward from the end of self:

Example
'foo'.index('o', -1)  # => 2
'foo'.index('o', -2)  # => 1
'foo'.index('o', -3)  # => 1
'foo'.index('o', -4)  # => nil
'foo'.index(/o./, -2) # => 1
'foo'.index(/.o/, -2) # => 1

Related: see Querying.

See also #include? #initialize_copy #hex #insert also in 4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0