Почему Javascript string.replace ("\ n \ t", "xxx") заменяет "\ n \ t" на "\ nxxx"? - PullRequest
3 голосов
/ 23 мая 2019

Я ожидаю заменить "\n\t" на "xxx" в txt файле:

"数字多功能光盘    DVD shùzì"

Я делаю это: str.replace("\n\t","xxx") метод сопоставляет необходимые части, но оставляет \n часть и заменяет \t только на 'xxx' .WHY?

почему, когда используется crtl+F в VSCOde, и это работает как шарм, а в коде - нет.

1 Ответ

1 голос
/ 23 мая 2019

Прежде всего, str.replace("a","b") заменяет только первое вхождение в JavaScript. Чтобы заменить их все, вам нужно использовать регулярное выражение с модификатором g. Итак, вы можете сначала попробовать str.replace(/\n\t/g,"xxx").

Далее, почему это работает в VSCode? В регулярном выражении VSCode \n соответствует любой последовательности разрыва строки, выбранной в нижнем правом углу приложения VSCode. В этом случае он работает как \R в PCRE, Java, Onigmo и т. Д.

Поскольку может быть много последовательностей окончания строки, вы можете рассмотреть возможность "преобразования" VSCode \n в (?:\r\n|[\r\n\x0B\x0C\x85\u2028\u2029]), который соответствует любой отдельной последовательности разрыва строки Unicode, и использовать

s = s.replace(/(?:\r\n|[\r\n\x0B\x0C\x85\u2028\u2029])\t/g, '')
...