diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-js-regex.spec | 354 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 356 insertions, 0 deletions
@@ -0,0 +1 @@ +/js-regex-1.0.1.tar.gz diff --git a/python-js-regex.spec b/python-js-regex.spec new file mode 100644 index 0000000..24e1b30 --- /dev/null +++ b/python-js-regex.spec @@ -0,0 +1,354 @@ +%global _empty_manifest_terminate_build 0 +Name: python-js-regex +Version: 1.0.1 +Release: 1 +Summary: A thin compatibility layer to use Javascript regular expressions in Python +License: MPL 2.0 +URL: https://github.com/Zac-HD/js-regex +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/7f/fa/9d7fed60e855bf970de97f59586d0a45d7498dd27fbed946fa9d7633db94/js-regex-1.0.1.tar.gz +BuildArch: noarch + + +%description +# js-regex + +*A compatibility layer to use Javascript regular expressions in Python.* + +Did you know that regular expressions may vary between programming languages? +For example, let's consider the pattern `"^abc$"`, which matches the string +`"abc"`. But what about the string `"abc\n"`? It's also matched in Python, +but not in Javascript! + +This and other slight differences can be really important for cross-language +standards like `jsonschema`, and that's why `js-regex` exists. + +## How it works + +```python +import re +import js_regex + +re.compile("^abc$").search("abc\n") # matches, unlike JS +js_regex.compile("^abc$").search("abc\n") # does not match +``` + +Internally, `js_regex.compile()` replaces JS regex syntax which has a different +meaning in Python with whatever *Python* regex syntax has the intended meaning. + +**This only works for the `.search()` method** - there is no equivalent to +`.match()` or `.fullmatch()` for Javascript regular expressions. + +We also check for constructs which are valid in Python but not JS - such as +named capture groups - and raise an explicit error. Constructs which are valid +in JS but not Python may also raise an error, because we're still using Python's +`re.compile()` function under the hood! + +The following table is adapted from [this larger version](https://web.archive.org/web/20130830063653/http://www.regular-expressions.info:80/refflavors.html), +ommiting other languages and any rows where JS and Python have the same behaviour. + +| Feature | Javascript | Python | Handling +| --- | --- | --- | --- +| `\a` (bell) | no | yes | Converted to JS behaviour +| `\ca`-`\cz` and `\cA`-`\cZ` (control characters) | yes | no | Converted to JS behaviour +| `\d` for digits, `\w` for word chars, `\s` for whitespace | ascii | unicode | Converted to JS behaviour (including `\D`, `\W`, `\S` for negated classes) +| `$` (end of line/string) | at end | allows trailing `\n` | Converted to JS behaviour +| `\A` (start of string) | no | yes | Explicit error, use `^` instead +| `\Z` (end of string) | no | yes | Explicit error, use `$` instead +| `(?<=text)` (positive lookbehind) | new in ES2018 | yes | Allowed +| `(?<!text)` (negative lookbehind) | new in ES2018 | yes | Allowed +| `(?(1)then\|else)` | no | yes | Explicit error +| `(?(group)then\|else)` | no | yes | Explicit error +| `(?#comment)` | no | yes | Explicit error +| `(?P<name>regex)` (Python named capture group) | no | yes | Not detected (yet) +| `(?P=name)` (Python named backreference) | no | yes | Not detected (yet) +| `(?<name>regex)` (JS named capture group) | new in ES2018 | no | Error from Python, not translated (yet) +| `$<name>` (JS named backreference) | new in ES2018 | no | Error from Python, not translated (yet) +| `(?i)` (case insensitive) | `/i` only | yes | Explicit error, compile with `flags=re.IGNORECASE` instead +| `(?m)` (`^` and `$` match at line breaks) | `/m` only | yes | Explicit error, compile with `flags=re.MULTILINE` instead +| `(?s)` (dot matches newlines) | no | yes | Explicit error, compile with `flags=re.DOTALL` instead +| `(?x)` (free-spacing mode) | no | yes | Explicit error, there is no corresponding mode in Javascript +| Backreferences non-existent groups are an error | no | yes | Follows Python behaviour +| Backreferences to failed groups also fail | no | yes | Follows Python behaviour +| Nested references `\1` through `\9` | yes | no | Follows Python behaviour + +Note that in many cases Python-only regex features would be treated as part of +an ordinary pattern by JS regex engines. Currently we raise an explicit error +on such inputs, but may translate them to have the JS behaviour in a future version. + + +## Changelog + +#### 1.0.1 - 2019-10-17 +- Allow use of native strings on Python 2. This is not actually valid according + to the spec, but it's only going to be around for a few months so whatever. + +#### 1.0.0 - 2019-10-04 +- Now considered feature-complete and stable, as all constructs recommended + for `jsonschema` patterns are supported and all Python-side incompatibilities + are detected. +- Compiled patterns are now cached on Python 3, exactly as for `re.compile` + +#### 0.4.0 - 2019-10-03 +- Now compatible with Python 2.7 and 3.5, until + [their respective EOL dates](https://devguide.python.org/#status-of-python-branches). + +#### 0.3.0 - 2019-09-30 +- Fixed handling of non-trailing `$`, e.g. in `"^abc$|^def$"` both are converted +- Added explicit errors for `re.LOCALE` and `re.VERBOSE` flags, which have no JS equivalent +- Added explicit checks and errors for use of Python-only regex features + +#### 0.2.0 - 2019-09-28 +Convert JS-only syntax to Python equivalent wherever possible. + +#### 0.1.0 - 2019-09-28 +Initial release, with project setup and a very basic implementation. + + + + +%package -n python3-js-regex +Summary: A thin compatibility layer to use Javascript regular expressions in Python +Provides: python-js-regex +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-js-regex +# js-regex + +*A compatibility layer to use Javascript regular expressions in Python.* + +Did you know that regular expressions may vary between programming languages? +For example, let's consider the pattern `"^abc$"`, which matches the string +`"abc"`. But what about the string `"abc\n"`? It's also matched in Python, +but not in Javascript! + +This and other slight differences can be really important for cross-language +standards like `jsonschema`, and that's why `js-regex` exists. + +## How it works + +```python +import re +import js_regex + +re.compile("^abc$").search("abc\n") # matches, unlike JS +js_regex.compile("^abc$").search("abc\n") # does not match +``` + +Internally, `js_regex.compile()` replaces JS regex syntax which has a different +meaning in Python with whatever *Python* regex syntax has the intended meaning. + +**This only works for the `.search()` method** - there is no equivalent to +`.match()` or `.fullmatch()` for Javascript regular expressions. + +We also check for constructs which are valid in Python but not JS - such as +named capture groups - and raise an explicit error. Constructs which are valid +in JS but not Python may also raise an error, because we're still using Python's +`re.compile()` function under the hood! + +The following table is adapted from [this larger version](https://web.archive.org/web/20130830063653/http://www.regular-expressions.info:80/refflavors.html), +ommiting other languages and any rows where JS and Python have the same behaviour. + +| Feature | Javascript | Python | Handling +| --- | --- | --- | --- +| `\a` (bell) | no | yes | Converted to JS behaviour +| `\ca`-`\cz` and `\cA`-`\cZ` (control characters) | yes | no | Converted to JS behaviour +| `\d` for digits, `\w` for word chars, `\s` for whitespace | ascii | unicode | Converted to JS behaviour (including `\D`, `\W`, `\S` for negated classes) +| `$` (end of line/string) | at end | allows trailing `\n` | Converted to JS behaviour +| `\A` (start of string) | no | yes | Explicit error, use `^` instead +| `\Z` (end of string) | no | yes | Explicit error, use `$` instead +| `(?<=text)` (positive lookbehind) | new in ES2018 | yes | Allowed +| `(?<!text)` (negative lookbehind) | new in ES2018 | yes | Allowed +| `(?(1)then\|else)` | no | yes | Explicit error +| `(?(group)then\|else)` | no | yes | Explicit error +| `(?#comment)` | no | yes | Explicit error +| `(?P<name>regex)` (Python named capture group) | no | yes | Not detected (yet) +| `(?P=name)` (Python named backreference) | no | yes | Not detected (yet) +| `(?<name>regex)` (JS named capture group) | new in ES2018 | no | Error from Python, not translated (yet) +| `$<name>` (JS named backreference) | new in ES2018 | no | Error from Python, not translated (yet) +| `(?i)` (case insensitive) | `/i` only | yes | Explicit error, compile with `flags=re.IGNORECASE` instead +| `(?m)` (`^` and `$` match at line breaks) | `/m` only | yes | Explicit error, compile with `flags=re.MULTILINE` instead +| `(?s)` (dot matches newlines) | no | yes | Explicit error, compile with `flags=re.DOTALL` instead +| `(?x)` (free-spacing mode) | no | yes | Explicit error, there is no corresponding mode in Javascript +| Backreferences non-existent groups are an error | no | yes | Follows Python behaviour +| Backreferences to failed groups also fail | no | yes | Follows Python behaviour +| Nested references `\1` through `\9` | yes | no | Follows Python behaviour + +Note that in many cases Python-only regex features would be treated as part of +an ordinary pattern by JS regex engines. Currently we raise an explicit error +on such inputs, but may translate them to have the JS behaviour in a future version. + + +## Changelog + +#### 1.0.1 - 2019-10-17 +- Allow use of native strings on Python 2. This is not actually valid according + to the spec, but it's only going to be around for a few months so whatever. + +#### 1.0.0 - 2019-10-04 +- Now considered feature-complete and stable, as all constructs recommended + for `jsonschema` patterns are supported and all Python-side incompatibilities + are detected. +- Compiled patterns are now cached on Python 3, exactly as for `re.compile` + +#### 0.4.0 - 2019-10-03 +- Now compatible with Python 2.7 and 3.5, until + [their respective EOL dates](https://devguide.python.org/#status-of-python-branches). + +#### 0.3.0 - 2019-09-30 +- Fixed handling of non-trailing `$`, e.g. in `"^abc$|^def$"` both are converted +- Added explicit errors for `re.LOCALE` and `re.VERBOSE` flags, which have no JS equivalent +- Added explicit checks and errors for use of Python-only regex features + +#### 0.2.0 - 2019-09-28 +Convert JS-only syntax to Python equivalent wherever possible. + +#### 0.1.0 - 2019-09-28 +Initial release, with project setup and a very basic implementation. + + + + +%package help +Summary: Development documents and examples for js-regex +Provides: python3-js-regex-doc +%description help +# js-regex + +*A compatibility layer to use Javascript regular expressions in Python.* + +Did you know that regular expressions may vary between programming languages? +For example, let's consider the pattern `"^abc$"`, which matches the string +`"abc"`. But what about the string `"abc\n"`? It's also matched in Python, +but not in Javascript! + +This and other slight differences can be really important for cross-language +standards like `jsonschema`, and that's why `js-regex` exists. + +## How it works + +```python +import re +import js_regex + +re.compile("^abc$").search("abc\n") # matches, unlike JS +js_regex.compile("^abc$").search("abc\n") # does not match +``` + +Internally, `js_regex.compile()` replaces JS regex syntax which has a different +meaning in Python with whatever *Python* regex syntax has the intended meaning. + +**This only works for the `.search()` method** - there is no equivalent to +`.match()` or `.fullmatch()` for Javascript regular expressions. + +We also check for constructs which are valid in Python but not JS - such as +named capture groups - and raise an explicit error. Constructs which are valid +in JS but not Python may also raise an error, because we're still using Python's +`re.compile()` function under the hood! + +The following table is adapted from [this larger version](https://web.archive.org/web/20130830063653/http://www.regular-expressions.info:80/refflavors.html), +ommiting other languages and any rows where JS and Python have the same behaviour. + +| Feature | Javascript | Python | Handling +| --- | --- | --- | --- +| `\a` (bell) | no | yes | Converted to JS behaviour +| `\ca`-`\cz` and `\cA`-`\cZ` (control characters) | yes | no | Converted to JS behaviour +| `\d` for digits, `\w` for word chars, `\s` for whitespace | ascii | unicode | Converted to JS behaviour (including `\D`, `\W`, `\S` for negated classes) +| `$` (end of line/string) | at end | allows trailing `\n` | Converted to JS behaviour +| `\A` (start of string) | no | yes | Explicit error, use `^` instead +| `\Z` (end of string) | no | yes | Explicit error, use `$` instead +| `(?<=text)` (positive lookbehind) | new in ES2018 | yes | Allowed +| `(?<!text)` (negative lookbehind) | new in ES2018 | yes | Allowed +| `(?(1)then\|else)` | no | yes | Explicit error +| `(?(group)then\|else)` | no | yes | Explicit error +| `(?#comment)` | no | yes | Explicit error +| `(?P<name>regex)` (Python named capture group) | no | yes | Not detected (yet) +| `(?P=name)` (Python named backreference) | no | yes | Not detected (yet) +| `(?<name>regex)` (JS named capture group) | new in ES2018 | no | Error from Python, not translated (yet) +| `$<name>` (JS named backreference) | new in ES2018 | no | Error from Python, not translated (yet) +| `(?i)` (case insensitive) | `/i` only | yes | Explicit error, compile with `flags=re.IGNORECASE` instead +| `(?m)` (`^` and `$` match at line breaks) | `/m` only | yes | Explicit error, compile with `flags=re.MULTILINE` instead +| `(?s)` (dot matches newlines) | no | yes | Explicit error, compile with `flags=re.DOTALL` instead +| `(?x)` (free-spacing mode) | no | yes | Explicit error, there is no corresponding mode in Javascript +| Backreferences non-existent groups are an error | no | yes | Follows Python behaviour +| Backreferences to failed groups also fail | no | yes | Follows Python behaviour +| Nested references `\1` through `\9` | yes | no | Follows Python behaviour + +Note that in many cases Python-only regex features would be treated as part of +an ordinary pattern by JS regex engines. Currently we raise an explicit error +on such inputs, but may translate them to have the JS behaviour in a future version. + + +## Changelog + +#### 1.0.1 - 2019-10-17 +- Allow use of native strings on Python 2. This is not actually valid according + to the spec, but it's only going to be around for a few months so whatever. + +#### 1.0.0 - 2019-10-04 +- Now considered feature-complete and stable, as all constructs recommended + for `jsonschema` patterns are supported and all Python-side incompatibilities + are detected. +- Compiled patterns are now cached on Python 3, exactly as for `re.compile` + +#### 0.4.0 - 2019-10-03 +- Now compatible with Python 2.7 and 3.5, until + [their respective EOL dates](https://devguide.python.org/#status-of-python-branches). + +#### 0.3.0 - 2019-09-30 +- Fixed handling of non-trailing `$`, e.g. in `"^abc$|^def$"` both are converted +- Added explicit errors for `re.LOCALE` and `re.VERBOSE` flags, which have no JS equivalent +- Added explicit checks and errors for use of Python-only regex features + +#### 0.2.0 - 2019-09-28 +Convert JS-only syntax to Python equivalent wherever possible. + +#### 0.1.0 - 2019-09-28 +Initial release, with project setup and a very basic implementation. + + + + +%prep +%autosetup -n js-regex-1.0.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-js-regex -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 1.0.1-1 +- Package Spec generated @@ -0,0 +1 @@ +f38604d1adbd500c90c42599c04ac7e0 js-regex-1.0.1.tar.gz |