2017-01-12 12 views
1

私は、次の複数行の文字列は、各行が新しいライン使用して表現された場合、次のような<pre>を使用して表示してい:Javascript + ReactJS:正規表現.match()が一貫して返されないのはなぜですか?

SchoolDistrictCode:291238-9 
location_version:3.4 
build:e9kem 

をそして私はbuild:e9kemアウトを解析したい、と毎回マルチの内容でしょうラインは異なります。しかし、それはすべてのbuild:を持っています。そのようにそれを表示するために

const regexp = /^build:(.*)$/m; 

//stringPar would vary every time 
const stringPar = `SchoolDistrictCode:291238-9 
location_version:3.4 
build:e9kem`; 

試み:

は私がそれを試みたことは正しく解析し、私が表示しようとすると、特定の複数行の文字列のために、それはUncaught TypeError: Cannot read property '1' of nullを返し

{stringPar.match(regexp)[1])}; 

stringPar.match(regexp)[1]のような文字列ですが、console.log(stringPar.match(regexp)[1])のようにコンソールがログに記録されると、コンソールは文字列を正しく記録します。

何が問題になる可能性がありますか?

は、それは基本的に小道具が、それに渡されると、何度もレンダリングされていますコンポーネントの事前にありがとうと(ReactJSで)upvoteだろう/受け入れ答え

EDIT

export default class tableRow extends Component { 
    ... 

    render() { 
      console.log(this.props.stringPar.match(regexp)[1]); 

      return (
       <tr> 
       <td> 
        {/*Even tried {this.props.stringPar.match(regexp)[1]==null? " ": this.props.stringPar.match(regexp)} but still getting the same error*/} 
        <button>{this.props.stringPar.match(regexp)[1]}</button> 
       <td> 
       <tr> 
     ) 
    } 
} 
+0

*「特定の複数行の文字列」の場合*具体的な例を挙げてください。あなたの問題は、非同期コードとリンクすることもできます。同じコードブロックで失敗し、問題を説明する 'console.log'を持つコードスニペットを提供してください。あなたが得るエラーがキャッチされない例外TypeErrorが 'である場合 – trincot

+0

@trincot編集 –

+0

をご覧ください:プロパティを読み取ることができません「1」null'なのでのそれはthis.props.stringPar.match(正規表現)'のリターンは 'であることを意味し配列の値ではなくヌルを返します。なぜあなたが試したチェックがうまくいかなかったのでしょうか?正規表現が時々失敗するように見えます。 – jonowzz

答えて

0

What could possibly be the issue?

正規表現は、おそらくので、すべての場合に一致していません:あなたはそれが一致しない場合、文字列がどのように見えるか見ることができるように

every time the content of the multi-line will vary

はこのような何かを実行します。

export default class tableRow extends Component { 
    ... 

    render() { 
      // ensure we actually have a string to run match on so don't get an error 
      const matchStr = this.props.stringPar || ''; 
      const m = matchStr.match(regexp); // run match 
      const matchFound = m && m.length > 0; // boolean, was match found 
      const build = matchFound ? m[1] : 'build fallback'; // regex match or fallback if no match was found 

      if (!matchFound) { 
      console.log("Could not find 'build:' in:", matchStr, matchStr.length === 0 ? 'BLANK!' : 'NOT BLANK');    
      } 

      return (
       <tr> 
       <td> 
        <button>{build}</button> 
       <td> 
       <tr> 
     ) 
    } 
} 

とそれに応じて正規表現を調整してください。

+0

レスポンスを気に入っていますが、いくつかのコンポーネントで同じエラーが発生すると、 'this.props.stringPar.match(regexp);'でプログラムが停止します。どのような点検をすればいいですか? –

+0

@JoKo時々、小道具のように聞こえます。私は私の答えを更新しました。 – Jack

+0

@JoKoわかりません。時には 'ビルド'と時々 'dailyBuild'ですか? – Jack

関連する問題