óCoffeeScript Cookbook

Searching for Substrings

Problem

You need to search for a substring, and return either the starting position of the match or the matching value itself.

Solution

There are several ways to accomplish this using regular expressions. Some methods are called on a RegExp pattern or object and some are called on String objects.

RegExp objects

The first way is to call the test method on a RegExp pattern or object. The test method returns a boolean value:

match = /sample/.test("Sample text")
# => false

match = /sample/i.test("Sample text")
# => true

The next way to is to call the exec method on a RegExp pattern or object. The exec method returns an array with the match information or null:

match = /s(amp)le/i.exec "Sample text"
# => [ 'Sample', 'amp', index: 0, input: 'Sample text' ]

match = /s(amp)le/.exec "Sample text"
# => null

String objects

The match method matches a given string with the RegExp. With ā€˜gā€™ flag returns an array containing the matches, without ā€˜gā€™ flag returns just the first match or if no match is found returns null.

"Watch out for the rock!".match(/r?or?/g)
# => [ 'o', 'or', 'ro' ]

"Watch out for the rock!".match(/r?or?/)
# => [ 'o', index: 6, input: 'Watch out for the rock!' ]

"Watch out for the rock!".match(/ror/)
# => null

The search method matches RegExp with string and returns the index of the beginning of the match if found, -1 if not.

"Watch out for the rock!".search /for/
# => 10

"Watch out for the rock!".search /rof/
# => -1

Discussion

Regular Expressions are a powerful way to test and match substrings.