Parentheses in regular expressions have the following meanings
- Limit the scope of the quantifier
- Limit the scope of the multi-select structure
- Capture text for back references
- Group capture
- Only grouping but not capturing
- Look ahead
1. Limit the scope of quantifiers
1
2
3
|
var reg1
= /(Matz)?/; //
0 or 1 Matz
var reg2
= /(Matz)+/; //
1 or more Matz
var reg3
= /(Matz)*/; //
0 or more Matz
|
2. Limit the range of the multi-select structure
1
2
3
4
|
var reg
= /(Matz|Eich)/
reg.test( 'Matz' ) //
=> true
reg.test( 'Eich' ) //
=> true
reg.test( 'John' ) //
=> false
|
3. Capture text for backreferences
1
2
3
4
5
6
|
var reg
= /(boy)1/ //
Equivalent to /boyboy/
reg.test( 'boy' ) //
=> false
reg.test( 'boyboy' ) //
=> true
var reg
/(boy)(girl)12/
reg.test( 'boygirlboygirl' ) //
=> true
|
Four. Group capture
1
2
3
4
5 6
7
8
9
10
11
12
13
14
|
var reg1
= /(d{3}) (d{3})/
var str
= '111
222'
str.replace(reg1, '$2
$1' ) //
=> '222 111' , note that $2 and $1 here store the matching string
var reg2
= /(d{3})(d{4})(d{4})/
var mobile
= '13522722724'
reg2.test(mobile)
RegExp.$1 //
=> 135
RegExp.$2 //
=> 2272
RegExp.$3 //
=> 2724
var reg3
= /(d{3})(d{4})(d{4})/
var mobile
= '13522722724'
mobile.replace(reg3, '$1
$2 $3' ) //
=> '135 2272 2724'
|
5. Only grouping without capturing (together with "?:")
1
2
3
|
var reg
= /(?:d+)/
reg.test( '13522722724' )
RegExp.$1 //
=> '' Do not store matched elements
|
In longer regular expressions, back references will reduce the matching speed and performance. Grouping without capturing should be used when back references are not needed. .
6. Lookahead (with "?=")
It tells the regular expression to look forward some characters but not move the position. Lookahead does not match any characters and only matches specific positions in the text.
1
2
3
4
5
|
var reg
= /(John) (?=Resig)/
reg.test( 'John' ) //
=> false
reg.test( 'John
Backus' ) //
=> false
reg.test( 'John
Reisg' ) //
=> true
RegExp.$1 //
=> 'John', please note that this is not "John Resig"
|
The following is a small function that uses lookahead to format mobile phone numbers
1
2
3
4
5
6
7
8
9
|
/*
*
Separate mobile phone numbers
*
13522722724 -> 135 2272 2724
*/
function separateMobile(num)
{
var arr
= ( '0' +
num ).replace(/(d{4})(?=d)/g, "$1
" ).split( '' )
arr.shift()
return arr.join( '' )
}
|
The above introduces the ambiguity of regular expression parentheses, including regular expressions and parentheses. I hope it will be helpful to friends who are interested in PHP tutorials.