You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.2 KiB
42 lines
1.2 KiB
6 years ago
|
from __future__ import unicode_literals
|
||
|
from ..conversions import *
|
||
|
from ..func_utils import *
|
||
|
from ..base import SpaceTuple
|
||
|
|
||
|
REG_EXP_FLAGS = ('g', 'i', 'm')
|
||
|
|
||
|
|
||
|
def RegExp(this, args):
|
||
|
pattern = get_arg(args, 0)
|
||
|
flags = get_arg(args, 1)
|
||
|
if GetClass(pattern) == 'RegExp':
|
||
|
if not is_undefined(flags):
|
||
|
raise MakeError(
|
||
|
'TypeError',
|
||
|
'Cannot supply flags when constructing one RegExp from another'
|
||
|
)
|
||
|
# return unchanged
|
||
|
return pattern
|
||
|
#pattern is not a regexp
|
||
|
if is_undefined(pattern):
|
||
|
pattern = u''
|
||
|
else:
|
||
|
pattern = to_string(pattern)
|
||
|
flags = to_string(flags) if not is_undefined(flags) else u''
|
||
|
for flag in flags:
|
||
|
if flag not in REG_EXP_FLAGS:
|
||
|
raise MakeError(
|
||
|
'SyntaxError',
|
||
|
'Invalid flags supplied to RegExp constructor "%s"' % flag)
|
||
|
if len(set(flags)) != len(flags):
|
||
|
raise MakeError(
|
||
|
'SyntaxError',
|
||
|
'Invalid flags supplied to RegExp constructor "%s"' % flags)
|
||
|
return args.space.NewRegExp(pattern, flags)
|
||
|
|
||
|
|
||
|
def RegExpCreate(args, space):
|
||
|
_args = SpaceTuple(args)
|
||
|
_args.space = space
|
||
|
return RegExp(undefined, _args)
|