Skip to content

Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →

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('ち')  # => 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('ち', 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.0 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0