1
0
mirror of https://github.com/robertkrimen/otto synced 2025-10-19 19:55:30 +08:00
otto/builtin_regexp.go
2013-02-20 15:58:45 -08:00

49 lines
1.2 KiB
Go

package otto
import (
"fmt"
)
// RegExp
func builtinRegExp(call FunctionCall) Value {
return toValue(call.runtime.newRegExp(call.Argument(0), call.Argument(1)))
}
func builtinNewRegExp(self *_object, _ Value, argumentList []Value) Value {
return toValue(self.runtime.newRegExp(valueOfArrayIndex(argumentList, 0), valueOfArrayIndex(argumentList, 1)))
}
func builtinRegExp_toString(call FunctionCall) Value {
thisObject := call.thisObject()
source := toString(thisObject.get("source"))
flags := []byte{}
if toBoolean(thisObject.get("global")) {
flags = append(flags, 'g')
}
if toBoolean(thisObject.get("ignoreCase")) {
flags = append(flags, 'i')
}
if toBoolean(thisObject.get("multiline")) {
flags = append(flags, 'm')
}
return toValue(fmt.Sprintf("/%s/%s", source, flags))
}
func builtinRegExp_exec(call FunctionCall) Value {
thisObject := call.thisObject()
target := toString(call.Argument(0))
match, result := execRegExp(thisObject, target)
if !match {
return NullValue()
}
return toValue(execResultToArray(call.runtime, target, result))
}
func builtinRegExp_test(call FunctionCall) Value {
thisObject := call.thisObject()
target := toString(call.Argument(0))
match, _ := execRegExp(thisObject, target)
return toValue(match)
}