Comments (8)
For ranges, numerical values make more sense. But for individual characters that have an ASCII representation, it is much more readable to have them there.
from regenerate.
What printable ASCII characters do not need any escaping in JavaScript regular expression literals?
Here are all printable ASCII characters:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
AFAIK, the following characters have to be escaped (prefixed with \
) in JavaScript regular expressions:
$
(
)
*
+
.
?
[
\
^
{
|
That leaves the following list:
!"#%&',-/0123456789:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ]_`abcdefghijklmnopqrstuvwxyz}~
Regenerate might return a character class that is wrapped in []
, and even if it doesn’t, the output may be used in such a context, so -
and ]
must be escaped too. That leaves the following list of printable ASCII characters that do not need escaping:
!"#%&',/0123456789:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ_`abcdefghijklmnopqrstuvwxyz}~
Are there any others in the above list that absolutely need escaping? @jdalton and @kitcambridge, I seem to recall you were aware of issues when not escaping ]
etc. in certain (old) engines. Do you remember the details?
(Note that in Regenerate, non-ASCII symbols are escaped anyway (by design – Regenerate’s output should always be ASCII-only).)
from regenerate.
Ya I had to escape a few more for better narwhal/ringo support. See lodash/lodash@06d3740 (edge lodash).
}
]
from regenerate.
Ok so the final list of printable ASCII characters to escape is:
$()*+-.?[\]^{|}
And the list of printable ASCII characters that do not need escaping are:
!"#%&',/0123456789:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ_`abcdefghijklmnopqrstuvwxyz~
Thanks!
from regenerate.
Escaping /
is required for some ancient version of Firefox (totally may not be relevant).
from regenerate.
Ooh – any ideas which exact version(s), or where I can find more info?
from regenerate.
You're gonna laugh at me, but it's Firefox v1 (I have a note in platform.js source)
from regenerate.
jaw drops
from regenerate.
Related Issues (20)
- Optimization / “bug” with ranges
- `regexNull`: `\08` / `\09`
- Add `regenerate.prototype.remove(fn)`
- Optimize `regenerate.prototype.removeRange`
- Constants for the ranges “BMP code point”, “lead surrogate”, “tail surrogate” HOT 2
- Improve performance / decrease memory usage HOT 3
- Avoid `Array#splice` where possible
- Avoid overhead of calling `dataFromCodePoints()` etc. internally HOT 1
- JavaScript identifier generation script broken since rewrite HOT 3
- Script to convert any Regenerate set to code that generates it
- Bug in `.remove(set)`? HOT 1
- Write a fuzzer to try and find more bugs
- Reduce file size to use it as a RegExp polyfill HOT 1
- Matching lone surrogates *only* HOT 3
- Unexpected matches in the resulting RegExp HOT 3
- Add option to output ES6 `u`-compatible patterns
- isArray is not using the native isArray method, causing incompatibilities with prototype.js
- Invert regular expression? HOT 1
- Non-minimal regex when adding a second range lower than the first HOT 1
- Incorrect optimization in surrogateMappings HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from regenerate.