Как использовать RegExp в JavaScript React-Native Webview? - PullRequest
0 голосов
/ 29 марта 2020

Когда я использую регулярное выражение в введенном React-Native-Webview JavaScript prop, выдается ошибка Unterminated regular expression literal error, и регулярное выражение не учитывается.

Как использовать регулярное выражение во введенном JavaScript? Если нет, есть ли способ, который я могу использовать?

Минимальный воспроизводимый код ниже:

// this won't work
<WebView
  source={{ uri: 'https://github.com/ashi009/node-fast-html-parser' }}
  injectedJavaScript={`const regE = /\n|\r/`}
/>

// this won't work as well
<WebView
  source={{ uri: 'https://github.com/ashi009/node-fast-html-parser' }}
  injectedJavaScript={`const regE = new RegExp(/\n|\r/);`}
/>

// this will work
<WebView
  source={{ uri: 'https://github.com/ashi009/node-fast-html-parser' }}
  injectedJavaScript={`const regE = /A*B*C*/`}
/>
  • ОС: iOS
  • Версия ОС: 13.3.1
  • Реактивная версия: 0.61.2
  • response-native-webview версия: 8.1.2

Также проверьте экран ошибки ниже.

enter image description here

Полный Сообщение об ошибке:

Ошибка оценки введенного JavaScript: Возможно, это связано с неподдерживаемым типом возврата. Попробуйте добавить true в конец введенной строки JavaScript. Ошибка Domain = WKErrorDomain Code = 4 «Возникла исключительная ситуация * JavaScript» UserInfo = {WKJavaScriptExceptionLineNumber = 1, WKJavaScriptExceptionMessage = SyntaxError: Литерал регулярного выражения без определения '/', WKJavaScriptExceptionColumnNumber = 0, WKJavaScriptExceptionSourceURL = 1032 1032 * 1032 NSLocalizedDescription = A JavaScript возникла исключительная ситуация}

1 Ответ

2 голосов
/ 29 марта 2020

Вы пишете не просто Javascript - вы пишете Javascript в веб-просмотре , с помощью которого ваш синтаксис должен оцениваться первым. Чтобы использовать буквальную обратную косую черту sh в injectedJavaScript (например, для \r), вместо нее поставьте две обратные косые черты (\\r):

injectedJavaScript={`const regE = new RegExp(/\\n|\\r/);`}

Я думаю, что

<WebView
  source={{ uri: 'https://github.com/ashi009/node-fast-html-parser' }}
  injectedJavaScript={`const regE = new RegExp(/\n|\r/);`}
/>

принимает \n в строковом литерале в качестве новой строки в коде и эквивалентно:

<WebView
  source={{ uri: 'https://github.com/ashi009/node-fast-html-parser' }}
  injectedJavaScript={`const regE = new RegExp(/
|\r/);`}
/>

(то же самое делается с \r). Но переводы строк не допускаются в литералах регулярных выражений.

...