JavaReplaceAll到javascript正则表达式

JavaReplaceAll到javascript正则表达式,java,javascript,regex,Java,Javascript,Regex,我想将一些用户输入测试从Java转移到javascript。代码假定在任何位置从用户输入字符串中删除通配符。我正在尝试将以下Java符号转换为javascript,但不断出现错误 "Invalid regular expression: /(?<!\")~[\\d\\.]*|\\?|\\*/: Invalid group". “无效的正则表达式:/(?正如anubhava指出的,问题在于JavaScript不支持lookbehind断言。遗憾的是,这是真的。原始正则表达式中的lookbe

我想将一些用户输入测试从Java转移到javascript。代码假定在任何位置从用户输入字符串中删除通配符。我正在尝试将以下Java符号转换为javascript,但不断出现错误

"Invalid regular expression: /(?<!\")~[\\d\\.]*|\\?|\\*/: Invalid group".

“无效的正则表达式:/(?正如anubhava指出的,问题在于JavaScript不支持lookbehind断言。遗憾的是,这是真的。原始正则表达式中的lookbehind断言是
(?)。具体来说,它只查找不以双引号开头的字符串

但是,并不是所有的东西都丢失了。有一些技巧可以用来实现与查找相同的结果。在这种情况下,查找只是为了防止替换波浪线之前的字符。我们可以在JavaScript中通过匹配字符来实现这一点,但随后将其包含在替换中:

input=input.replace(/([^“])~[\d.]*\?\*/g,$1');
请注意,对于替换的
\?
\*
,将没有组,因此
$1
将计算为空字符串,因此将其包含在替换中不会有任何影响


注意:这与原始正则表达式不是100%等价的。特别是lookaround断言(如上面的lookbehind)还可以防止输入流被消耗,这有时在匹配彼此相邻的内容时非常有用。但是,在这种情况下,我想不出一种解决问题的方法。制作完全等效的正则表达式将更加困难,但我相信这满足了原始正则表达式的需要。

e在Javascript中不落后。有人能确认在JS中\d也需要像在Java中一样\\d编写吗?@Pshemo在编写上面这样的文本regexp时,没有必要逃逸\as\。@感谢澄清。这太棒了!我不知道从哪里开始。这对我来说已经足够接近了,我肯定在使用它。谢谢你太好了!很高兴它有帮助!祝你好运!
str = str.replaceAll("(?<!\")~[\\d\\.]*|\\?|\\*","");
input = input.replace( /(?<!\")~[\\d\\.]*|\\?|\\*/g, '');