【发布时间】:2014-05-23 00:26:05
【问题描述】:
我正在使用 RegEx 匹配来自文本区域的一组更窄的 TinyMCE HTML。宽度太大了,会产生偏差,所以我在 JavaScript 中编写测试代码。
我的问题是为什么 $3 不仅匹配“1000px”而且匹配 table 标记之后的文档的其余部分?
<script language="javascript">
// change table width
function adjustTable(elem0,elem1) {
// debugging, place results in div
elem1.innerHTML = elem0.innerHTML.replace(/^(.*)(\u003Ctable.*?\s*?\w*?width\u003D[\u0022\u0027])(\d+px)([\u0022\u0027].*?\u003E)(.*)$/img,"$3");
}
</script>
<button type="button" onclick="adjustTable(document.getElementById('myTable'),document.getElementById('myResult'))">RegEx</button>
<div id="myTable">
<table width="1000px">
<thead>
<tr><th colspan="3">Table Header</th></tr>
</thead>
<tbody>
<tr><td>alpha</td><td>beta</td><td>gamma</td></tr>
</tbody>
</table>
</div>
<textarea id="myResult">
</textarea>
是的,我确实理解 RegEx 和 HTML 是不应该交叉的流,因为 HTML 很复杂,等等。我正在尝试使 HTML 的子集可打印。
我看不出它如何以多种方式匹配。
下面是 $3 的结果。
1000px
<thead>
<tr><th colspan="3">Table Header</th></tr>
</thead>
<tbody>
<tr><td>alpha</td><td>beta</td><td>gamma</td></tr>
</tbody>
</table>
它匹配 1000px,但是在 table 标签之后有多余的东西,这很奇怪,因为我认为我在 table 标签中强制匹配。想法?
【问题讨论】:
-
您可以完全放弃正则表达式并使用 CSS 覆盖宽度:
#myTable table {width:100%;}EG:jsfiddle.net/L7DqU -
你说你明白不使用正则表达式但你还是想使用它们?为什么?
-
我不确定您的
adjustTable()方法应该做什么或为什么需要 RegEx。你不能只使用 JavaScript 来调整表格的大小吗? jsfiddle.net/3hLp7 -
jQuery 和 for 循环遍历每个表数据,表大小是执行我想做的事情的正确方法,强制表宽度。我刚开始的时候没有想到。此外,要匹配像 .在其他语言中,您必须使用排中律 [\s\S] 因为 '.'方括号中的含义不同,我在另一个线程中找到了。 '[.\n]' 不好。但是,是的,正确的做法是在 jQuery 中,但在 tinyMCE 中,HTML 更严格,所以它是可行的。
标签: javascript regex replace