FESI language extensions - File I/O
Author: Jean-MarcLugrin
Description: Describe the FESI EcmaScript interpreter extensions to access File I/O capabilities
Keywords: EcmaScript, JavaScript, JScript, Java, extension

| Free EcmaScript Interpreter. A JavaScript interpreter written in Java.

Language extensions - Regular Expressions

There regular expression can either user the GNU RegExp package or the ORO Inc package. The ORO inc package is used if the package `com.oroinc.text.regex` is on the class path, otherwise the GNU package is used (the GNU classes are part of the distributed binary).

You can evaluate the value of RegExp to find which version is used (it prints the name of the class of the RegExp extension loaded).

The `RegExp` extension provides a regular expression bsed search and replacement mechanism which is similar to the same capabilities in latest version of JavaScript by Netscape. It is a subset of these capabilities, as the Netscape variant add incompatible extensions to the EcmaScript syntax, and could not be extended to support multithreading.

The ORO regular expression extension uses the OROMatcher package and therefore depends on it for the detailed capabilities of the matcher, which is highly compatible with Perl 5. Details on the syntax and semantic of regular expressions can be found in the ORO documentation. Version 1.1 is used.

The GNU regular expression extension allow to distribute programs which are fully LGPL. Only the classes are included in the FESI distribution itself, the original sources being available at gnu.regexp-1.0.8.tar.gz. The version 1.0.8 is used.

Regular expressions are built by the `RegExp` constructor and can then be used either by `RegExp` specific functions or selected `String` functions.

### OptionalRegExp extension

If you do not know which regular expression matcher will be available at run-time, but you would like to provide it to user if available, then your main program can load `Fesi.Extensions.OptionalRegExp` instead of specifically `Fesi.Extension.ORORegExp` or `Fesi.Extension.GNURegExp`. That way there will be no error message at load time, only at execution time of a script attempt to create a `RegExp` object. This is the method used by the interpreter bundled with the package.

### RegExp constructor

The `RegExp` constructor creates a regular expression from a text representation. The regular expression is created as case sensitive and for single replacement. Its syntax is not checked before its first use. Exemple:

> `r = new RegExp("[a-z][a-z0-9]*");`

It is not possible to create regular expressions by using the `/regexp/` syntax.

### RegExp objects

The objects created by the `RegExp` constructor keep some attributes of the regular expression, as its case insensitiveness and its substitution mode. The recognized attributes are:

`global`
  Use global (multiple) replacement in the `replace` function if `true`. `false` by default.
`ignoreCase`
  Ignore case if `true`. `false` by default.

The attributes can be changed anytime. The regular expression is automatically recompiled if neeeded. There is therefore no `compile` routine.
The following routines are defined on regular expression objects:

`exec("string")`
  Does a match on the string with the regular expression. Return `null` or a result array (see below).
`test("string")`
  Does a match on the string with the regular expression, returning `true` or `false` (faster than `test`)..

### Added String routines

The following `String` routines are added or enhanced:

`match(regexp)`
  Does a match on the string with the regular expression. Return `null` or a result array (see below).
`replace(regexp,replacementString)`
  Replaces the first (default) or all (if `global` is `true`) occurences of the regular expression with the replacement String, extrapolation $n variables.
`search(regexp)`
  Does a match on the string with the regular expression. Returns -1 if not found or the index of the start of the match if found. Faster than `match`.
`split(regexp[,limit])`
  Split the string at regexp points, returning at most limit (defaults to all) substrings. The default `split` behaviour is still used if the parameter is not a regexp.

### Result array

A result array is returned by some routines. It includes both properties and the strings as the array elements. The properties are::

`index`
  The index of the start of the match.
`input`
  The string which was matched.

The array elements are the total match followed by the submatches (the parts inside parentheses).
If there is no match, a `null` (which is tested as `false`) is returned.

Return to the main page

Last update: 29 July 2000