разница между новой записью RegExp (string) и / expression / notation [duplicate]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

14
задан KorHosik 10 August 2011 в 18:02
поделиться

2 ответа

Вам нужно удвоить символы escape \ в строковых литералах, поэтому литерал регулярного выражения обычно предпочтительнее.

Попробуйте:

'Z[\\s\\S]*?Z'
19
ответ дан zzzzBov 24 August 2018 в 03:03
поделиться

Я думаю, это потому, что вам нужно избегать обратной косой черты, даже при использовании одинарных кавычек. Попробуйте следующее:

new RegExp('Z[\\s\\S]*?Z','g')
2
ответ дан Ben Atkin 24 August 2018 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: