Машинопись реагировать -Объект, возможно, ноль - PullRequest
0 голосов
/ 30 апреля 2020

Я супер новый, чтобы реагировать, и меня попросили помочь с веб-сайтом реагировать на машинопись. В данный момент мои совпадения const возвращают объект, возможно, 'нулевой'. Я пытался сделать свое соответствие постоянным, равным нулю, но на всю жизнь я не могу понять, как обойти это, чтобы не получить эту ошибку. Любая помощь будет высоко ценится.

 case "text":
      return (
        <div>
          {" "}
          {note.text.map((content: string, idx: number) => {
            const result = [];
            const matches = content.match(
              /(.*?)(<a href=")?(https?|www)((".*?>.*?<\/a>)|[^\s>]?)*(.*?)/gi
            );

            if (!!matches) {
              matches.forEach((match) => {
                let link;
                if (/href="/i.test(match)) {
                  const url = match 
                    .match(/<a href="(.*?)(?=">)/i)[0]
                    .replace('<a href="', "");
                  const linkText = match
                    .match(/(?:<a href=".*?">)(.*)(?=<\/a>)/)[0]
                    .replace(/(?:<a href=".*?">)/i, "");
                  link = <a href={url}>{linkText}</a>;
                } else {
                  const url = match.match(/(https?|www)[^\s]*/gi).join("");
                  link = <a href={url}>{url}</a>;
                }

                const splitter = match.match(
                  /(<a href=")?(https?|www)[^\s]*(.*<\/a>)?/gi
                )[0];
                const paredPlainText = match.split(new RegExp(splitter));
                result.push(paredPlainText[0]);
                result.push(link);
                result.push(paredPlainText[1]);
              });
            } else {
              result.push(content);
            }

            return <p>{result}</p>;
          })}
        </div>
      );

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Спасибо всем за ответ! Это был мой ответ с использованием оператора ненулевого подтверждения ! после .match, как показано ниже

case "text":
      return (
        <div>
          {" "}
          {note.text.map((content: string, idx: number) => {
            const result = [];
            const matches = content.match(
              /(.*?)(<a href=")?(https?|www)((".*?>.*?<\/a>)|[^\s>]?)*(.*?)/gi
            );

            if (!!matches) {
              matches.forEach((match) => {
                let link;
                if (/href="/i.test(match)) {
                  const url = match
                    .match(/<a href="(.*?)(?=">)/i)![0]
                    .replace('<a href="', "");
                  const linkText = match
                    .match(/(?:<a href=".*?">)(.*)(?=<\/a>)/)![0]
                    .replace(/(?:<a href=".*?">)/i, "");
                  link = <a href={url}>{linkText}</a>;
                } else {
                  const url = match.match(/(https?|www)[^\s]*/gi)!.join("");
                  link = <a href={url}>{url}</a>;
                }

                const splitter = match.match(
                  /(<a href=")?(https?|www)[^\s]*(.*<\/a>)?/gi
                )![0];
                const paredPlainText = match.split(new RegExp(splitter));
                result.push(paredPlainText[0]);
                result.push(link);
                result.push(paredPlainText[1]);

              });
            } else {
              result.push(content)
            }
            console.log(result);

            return <p>{result}</p>;
          })}
        </div>
      );
0 голосов
/ 30 апреля 2020

Я не совсем уверен, что понимаю вашу проблему, описание звучит немного запутанно, но я полагаю, вы имеете в виду эту строку:

if (!!matches) {

верно?

Это преобразует результат вызова соответствия (который может быть массивом с результатами или null) в bool. Просто используйте вместо этого

if (matches) {

, который проверяет истинное выражение (null представляет ложный результат).

Если этот ответ не тот, что вам нужен, добавьте больше описания к ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...