正则表达式多行匹配

时间:2015-04-14 00:31:50

标签: javascript c# regex

我有这些数据,实际上是一个降价表:

blah blah blah
| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |
blah blah
blah

我想进行正则表达式匹配并获取管道之间的值。

理想情况下,我希望为每一行提供一个组,然后为每个组提供一个子组'。

更理想的是,我希望确保每行中的单元格/列数相同。

我的尝试要么匹配行/表中的最后一个单元格,要么匹配每隔一个单元格。这完全是炸弹: \|(?:([^\r\n\|]*)\|)+\r?\n\|(?:(\:?-+\:?)\|)+\r?\n(\|(?:([^\r\n\|]*)\|)+\r?\n)+

这也非常令人沮丧:^#(?:([^#]+)#)+$

在javascript或C#中寻找解决方案。

2 个答案:

答案 0 :(得分:0)

我会用这样的东西进入js,但前提是你不需要正则表达式来做别的事情; - )

var yourStr
var groups = yourStr.split('\n')
var cells = yourStr.split('|')
if (cells.length < asItShouldBe) { ... }
var cell1 = cells[1]
var cell2 = cells[2]
...

答案 1 :(得分:0)

尝试

var input = document.querySelectorAll("pre")[0].innerText;
var output = input.match(/\s+|\w+-\w+|\w+|\W+\d+|\d+/gi)
             .map(function(word, i) {
               return word.replace(/\||\s|--+|\s-\s+|:/gi, "")
             });

document.body.insertBefore(
  document.createTextNode(output.join(" "))
, document.getElementsByTagName("hr")[0]
);
<hr />
<pre>
blah blah blah
| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |
blah blah
blah
</pre>