我一直在對這個單詞敲擊我的頭一個星期,只是無法讓它工作,請你幫忙嗎?我處理用戶輸入,將其轉換爲HTML表格。對於每個空單元格,我創建一個包含1個垂直製表符的單元格,然後用它來(嘗試)執行以下操作:只有在表格出現後才需要刪除1個表格單元格(其中包含1個垂直製表符字符)包含0個或更多非垂直製表符的單元格。JavaScript正則表達式 - 刪除填充表格單元格之後的空表格單元格
例如...
<table>
<tr>
<td>1</td>
<td></td> // this cell should be removed
<td></td>
<td></td>
<td></td>
<td>some text</td>
<td></td> // this cell should be removed
<td></td>
<td></td>
<td></td>
<td>4973as</td>
<td></td> // this cell should be removed
<td></td>
<td></td>
<td></td>
<td>90-16</td>
<td>sdf;.s'df'f</td>
<td>£%$Dcgcfcgf</td>
<td></td> // this cell should be removed
<td></td>
<td></td>
</tr>
</table>
我試圖做到這一點在JavaScript和回顧後似乎是答案,但JavaScript的正則表達式引擎不支持lookbehinds。所以,我想這在PHP與在$ testInput數據完美地工作(在regex101.com)...
/(?<=<td>[^\x0B]*<\/td>)<td>\x0B<\/td>/g
...直到我意識到PHP不允許修改全球。我試着通過使用preg_replace_all()來解決這個問題 - 它不存在,但是preg_match_all()可以,你可以在循環中使用它來執行preg_replace()。這個問題呢?警告:的preg_match():編譯失敗:向後斷言不固定長度在偏移19
$testInput = "<table id=\"testInput\"><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>4</td><td></td><td>4</td><td></td><td>4</td><td></td><td>4</td><td></td><td>4</td><td></td><td>4</td><td></td><td>4</td><td></td><td>4</td><td></td></tr><tr><td></td><td>4</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td>4</td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td>4</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td>4</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td>4</td><td></td><td></td><td></td><td>4</td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>";
$pattern = "/(?<=<td>[^\x0B]*<\/td>)<td>\x0B<\/td>/";
pregReplaceAll($pattern, "", $testInput);
function pregReplaceAll($find, $replacement, $s) {
while (preg_match($find, $s)) {
$s = preg_replace($find, $replacement, $s);
}
echo $s;
}
上述腳本結果在輸入的回波沒有已發生進行更換。
我一直在這個日常生活中失去知覺,我的大腦已經麻木了......它看起來很簡單,但卻很複雜。
我最後的手段是在C#/ ASP中找到一個解決方案,但這是另一個需要學習的新事物......並非那是件壞事,但是JavaScript/PHP在2017年不能成爲這個瘸子嗎?
嘗試閱讀文檔。您會看到'preg_replace'默認情況下會替換*所有匹配項*。在JS中,你不需要向後看,使用捕獲組。 –
在JS中,你可以試試's = s.replace(/([^ \ x0B] * <\/td>)\ s *\ x0B <\/td>/g,「$ 1」)',參見[樣本正則表達式演示](https ://regex101.com/r/lZtDsn/1)。 –