Javascript + ReactJS:为什么regex .match()不能一致地返回?

时间:2017-01-12 21:22:58

标签: javascript html regex reactjs react-jsx

我使用<a>显示以下多行字符串,如下所示,其中每一行用新行表示:

<pre>

我想解析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`;

它正确解析,但是对于某些多行字符串,当我尝试显示{stringPar.match(regexp)[1])}; 这样的字符串时,它会返回Uncaught TypeError: Cannot read property '1' of null,但是当控制台像控制台一样记录时,控制台会正确记录字符串。日志(stringPar.match(正则表达式)[1])。

可能是什么问题?

提前感谢您,并将提出/接受答复

编辑(在ReactJS中)

它基本上是一个被反复渲染的组件,并将道具传递给它。

stringPar.match(regexp)[1]

1 个答案:

答案 0 :(得分:0)

  

可能是什么问题?

正则表达式在所有情况下都不匹配,可能是因为:

  

每次多线的内容都会有所不同

做这样的事情,这样你就可以看到字符串在匹配时的样子:

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>
          )
     }
}

并相应地调整你的正则表达式。