匹配并替换字符串中出现的所有反斜杠

时间:2011-10-06 23:36:49

标签: regex gwt gwt2

我在GWT中使用以下内容来查找字符串中的反斜杠并替换为\\。

String name = "\path\item";
name = RegExp.compile("/\\/g").replace(name, "\\\\");

但它不起作用,因为name = \ path \ item返回name = \ path \ item。

好的,我遵循Thomas Broyer的推荐和第一个 RegExp.compile(“\\”,“g”)。replace(bgPath,“\\\\”)给出:

Caused by: com.google.gwt.core.client.JavaScriptException: (SyntaxError): trailing \ in regular expression
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:237)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:132)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.regexp.shared.RegExp$.compile(RegExp.java)
    at com.ait.gwt.authtool.client.ui.TicketViewer.<init>(TicketViewer.java:197)
    at com.ait.gwt.authtool.client.AuthTool.onViewTicketBtnClicked(AuthTool.java:1942)
    at com.ait.gwt.authtool.client.AuthTool.onMessageReceived(AuthTool.java:1995)
    at com.ait.gwt.authtool.client.events.MessageReceivedEvent.dispatch(MessageReceivedEvent.java:44)
    at com.ait.gwt.authtool.client.events.MessageReceivedEvent.dispatch(MessageReceivedEvent.java:1)
    at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1)
    at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193)
    at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88)
    at com.google.gwt.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:52)

和第二个 bgPath.replaceAll(“\\”,“\\\\”)给出:

Caused by: java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 
\ 
 ^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.replaceAll(Unknown Source)
    at com.ait.gwt.authtool.client.ui.TicketViewer.<init>(TicketViewer.java:198)

但是当我输入: bgPath = bgPath.replaceAll(Pattern.quote(“\”),Matcher.quoteReplacement(“\\”));

正常工作(!!),因为它给出了:[INFO] [gwt_app] - !!! bgPath =背景\\卡通\\图像

1 个答案:

答案 0 :(得分:2)

RegExp.compile相当于JS中的new Regexp,因此参数不是regexp文字。您的代码应为RegExp.compile("\\", "g")

但对于这种特殊情况,name.replace("\\", "\\\\")应该足够了。