我有这些数据,实际上是一个降价表:
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#中寻找解决方案。
答案 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>