code: func NewRegExpWithFlag(s string, flags int) *RegExp {
  	ans := &RegExp{
  		b:     []rune(s),
  		flags: flags,
  	}
  	var e *RegExp
  	if len(s) == 0 {
  		e = makeStringRE("")
  	} else {
  		e = ans.parseUnionExp()
  		if ans.pos < len(ans.b) {
  			panic(fmt.Sprintf("end-of-string expected at position %v", ans.pos))
  		}
  	}
  	ans.kind = e.kind
  	ans.exp1, ans.exp2 = e.exp1, e.exp2
  	ans.s = e.s
  	ans.c = e.c
  	ans.min, ans.max, ans.digits = e.min, e.max, e.digits
  	ans.from, ans.to = e.from, e.to
  	ans.b = nil
  	return ans
  }
docs: // Constructs new RegExp from a string.