【发布时间】:2019-07-15 18:52:47
【问题描述】:
如何检测某个正则表达式字符串是否“简单”,即可以将其替换为简单字符串(从而完全避免使用正则表达式)。
例如:
input regex simple text form (if possible)
--------------------------------------------------
foo\.bar ---> foo.bar
foo ---> foo
ba\[12\]r ---> ba[12]r
ba.*foo ---> (not possible to represent as plain string)
基本上,我正在寻找与this answer 中描述的神话RegExp.escape 相反的RegExp.unescape,它要么与上述RegExp.escape 相反,要么以某种方式报告转换是不可能的.
正在寻找 JavaScript 解决方案,但 Java 也可以接受。
【问题讨论】:
-
类似
if (s.indexOf(s.replace(/\\([^])/g, '$1')) > -1) { console.log("Yes, it is 'simple'"); }?不过,这有时会导致误报。就像abc \wat正则表达式和abc wat字符串一样。 -
@WiktorStribiżew 你能解释一下你在那里做了什么吗?我很难跟上。
-
嗯,这就是你的逻辑:删除转义并检查字符串是否包含新字符串。我认为它不会在 100% 的情况下起作用。
-
[^]在做什么? -
这似乎很容易写...直到您意识到您不仅需要搜索元字符,而且还必须为
\c、\u和\0编写解析器。当然可行,但不是一件小事。
标签: javascript java regex