I've found two problems with regular expressions in the beta; they may be facets of a single bug.

1. Capture groups are generally broken

Code:
//echo -ag $regex(abc,/(a)|(b)|(c)/g) :: $regml(1) $regml(2) $regml(3)

7.43      :  3 :: a b c
7.43.1418 :  3 :: a b


2. Fix 7 regarding $regml and ()* breaks backwards compatibility. This fix fills optional groups with $null instead of skipping the capture. Expressions which had been crafted to accomplish this behavior already are now broken in the beta.

For example, in 7.43 (released,non-beta,curious versioning) you can see I have crafted this regex such that $regml(1) will contain either the scheme or $null, and $regml(2) will always contain the domain.

Run against two strings "http://domain.com" and "domain.com" you can see the results below, 7.43 the domain is in $regml(2) in both cases, in 7.43.1418 the domain was pushed to $regml(3)

Code:
(?:(https?)://|())(domain.com)

Code:
//noop $regex(http://domain.com,(?:(https?)://|())(domain.com)) | echo -ag n = $regml(0) :: $!regml(1) = $regml(1) :: $!regml(2) = $regml(2)

7.43      : n = 2 :: $regml(1) = http :: $regml(2) = domain.com
7.43.1418 : n = 3 :: $regml(1) = http :: $regml(2) =

//noop $regex(domain.com,(?:(https?)://|())(domain.com)) | echo -ag n = $regml(0) :: $!regml(1) = $regml(1) :: $!regml(2) = $regml(2)

7.43      : n = 2 :: $regml(1) = :: $regml(2) = domain.com
7.43.1418 : n = 3 :: $regml(1) = :: $regml(2) =


Now, I do prefer this new behavior where the original workaround is not necessary and optional groups are filled with $null:
Code:
(?:(https?)://)?(domain.com)

Code:
//noop $regex(domain.com,(?:(https?)://)?(domain.com)) | echo -ag n = $regml(0) :: $!regml(1) = $regml(1) :: $!regml(2) = $regml(2)
7.43.1418 : n = 2 :: $regml(1) = :: $regml(2) = domain.com

//noop $regex(http://domain.com,(?:(https?)://)?(domain.com)) | echo -ag n = $regml(0) :: $!regml(1) = $regml(1) :: $!regml(2) = $regml(2)
7.43.1418 : n = 2 :: $regml(1) = http :: $regml(2) = domain.com


It seems to me this backwards capability and new behavior can be preserved, because (?:(https?)://|())(domain.com) is interpreted to have 3 capture groups instead of 2, if http:// is present I would not expect the empty () after the OR to be captured. If my thinking is wrong here and the two ideas are incompatible, maybe the new behavior can remain by use of a switch or property.