mirror of
				https://github.com/robertkrimen/otto
				synced 2025-10-26 20:28:49 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package otto
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| )
 | |
| 
 | |
| // RegExp
 | |
| 
 | |
| func builtinRegExp(call FunctionCall) Value {
 | |
| 	pattern := call.Argument(0)
 | |
| 	flags := call.Argument(1)
 | |
| 	if object := pattern._object(); object != nil {
 | |
| 		if object.class == "RegExp" && flags.IsUndefined() {
 | |
| 			return pattern
 | |
| 		}
 | |
| 	}
 | |
| 	return toValue_object(call.runtime.newRegExp(pattern, flags))
 | |
| }
 | |
| 
 | |
| func builtinNewRegExp(self *_object, argumentList []Value) Value {
 | |
| 	return toValue_object(self.runtime.newRegExp(
 | |
| 		valueOfArrayIndex(argumentList, 0),
 | |
| 		valueOfArrayIndex(argumentList, 1),
 | |
| 	))
 | |
| }
 | |
| 
 | |
| func builtinRegExp_toString(call FunctionCall) Value {
 | |
| 	thisObject := call.thisObject()
 | |
| 	source := thisObject.get("source").string()
 | |
| 	flags := []byte{}
 | |
| 	if thisObject.get("global").bool() {
 | |
| 		flags = append(flags, 'g')
 | |
| 	}
 | |
| 	if thisObject.get("ignoreCase").bool() {
 | |
| 		flags = append(flags, 'i')
 | |
| 	}
 | |
| 	if thisObject.get("multiline").bool() {
 | |
| 		flags = append(flags, 'm')
 | |
| 	}
 | |
| 	return toValue_string(fmt.Sprintf("/%s/%s", source, flags))
 | |
| }
 | |
| 
 | |
| func builtinRegExp_exec(call FunctionCall) Value {
 | |
| 	thisObject := call.thisObject()
 | |
| 	target := call.Argument(0).string()
 | |
| 	match, result := execRegExp(thisObject, target)
 | |
| 	if !match {
 | |
| 		return nullValue
 | |
| 	}
 | |
| 	return toValue_object(execResultToArray(call.runtime, target, result))
 | |
| }
 | |
| 
 | |
| func builtinRegExp_test(call FunctionCall) Value {
 | |
| 	thisObject := call.thisObject()
 | |
| 	target := call.Argument(0).string()
 | |
| 	match, _ := execRegExp(thisObject, target)
 | |
| 	return toValue_bool(match)
 | |
| }
 | |
| 
 | |
| func builtinRegExp_compile(call FunctionCall) Value {
 | |
| 	// This (useless) function is deprecated, but is here to provide some
 | |
| 	// semblance of compatibility.
 | |
| 	// Caveat emptor: it may not be around for long.
 | |
| 	return Value{}
 | |
| }
 | 
