Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

js-regex

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

js-regex

A thin compatibility layer to use Javascript regular expressions in Python

  • 1.0.1
  • PyPI
  • Socket score

Maintainers
1

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

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, ommiting other languages and any rows where JS and Python have the same behaviour.

FeatureJavascriptPythonHandling
\a (bell)noyesConverted to JS behaviour
\ca-\cz and \cA-\cZ (control characters)yesnoConverted to JS behaviour
\d for digits, \w for word chars, \s for whitespaceasciiunicodeConverted to JS behaviour (including \D, \W, \S for negated classes)
$ (end of line/string)at endallows trailing \nConverted to JS behaviour
\A (start of string)noyesExplicit error, use ^ instead
\Z (end of string)noyesExplicit error, use $ instead
(?<=text) (positive lookbehind)new in ES2018yesAllowed
(?<!text) (negative lookbehind)new in ES2018yesAllowed
(?(1)then|else)noyesExplicit error
(?(group)then|else)noyesExplicit error
(?#comment)noyesExplicit error
(?P<name>regex) (Python named capture group)noyesNot detected (yet)
(?P=name) (Python named backreference)noyesNot detected (yet)
(?<name>regex) (JS named capture group)new in ES2018noError from Python, not translated (yet)
$<name> (JS named backreference)new in ES2018noError from Python, not translated (yet)
(?i) (case insensitive)/i onlyyesExplicit error, compile with flags=re.IGNORECASE instead
(?m) (^ and $ match at line breaks)/m onlyyesExplicit error, compile with flags=re.MULTILINE instead
(?s) (dot matches newlines)noyesExplicit error, compile with flags=re.DOTALL instead
(?x) (free-spacing mode)noyesExplicit error, there is no corresponding mode in Javascript
Backreferences non-existent groups are an errornoyesFollows Python behaviour
Backreferences to failed groups also failnoyesFollows Python behaviour
Nested references \1 through \9yesnoFollows 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
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.

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc