Сопоставление и замена всех вхождений обратной косой черты в строку - PullRequest
0 голосов
/ 07 октября 2011

Я использую следующее в GWT, чтобы найти обратную косую черту в строке и заменить на \\.

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

Но это не работает, потому что для name = \ path \ item возвращает name = \ path\ item.

хорошо, я следую рекомендациям Томаса Бройера и первого 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 Ответ

2 голосов
/ 07 октября 2011

RegExp.compile эквивалентен new Regexp в JS, поэтому аргумент не является литералом регулярного выражения. Ваш код должен читать RegExp.compile("\\", "g").

Но для этого конкретного случая достаточно name.replace("\\", "\\\\").

...