JavaScript正则表达式替换宽度属性匹配

乔丹·耶利内克

我正在使用RegEx来匹配来自文本区域的一组狭窄的TinyMCE HTML。宽度太大,会产生径流,因此我正在用JavaScript编写测试代码。

我的问题是,为什么$ 3不仅匹配“ 1000px”,而且匹配表格标记后的文档的其余部分?

<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标记中强制匹配。有什么想法吗?

Frambot

让我们通过记录正则表达式的整个结果来调试它:

  function adjustTable(elem0,elem1) {
    // debugging, place results in div
    console.log ( (/^(.*)(\u003Ctable.*?\s*?\w*?width\u003D[\u0022\u0027])(\d+px)([\u0022\u0027].*?\u003E)(.*)$/img).exec(elem0.innerHTML) );
  }

输出为:

[
0: "  <table width="1000px">"
1: "  "
2: "<table width=""
3: "1000px"
4: "">"
5: ""
index: 1
input: "↵  <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>↵"
]

因此,如果您想获得结果“ 1000px”,请使用以下代码:

(/^(.*)(\u003Ctable.*?\s*?\w*?width\u003D[\u0022\u0027])(\d+px)([\u0022\u0027].*?\u003E)(.*)$/img).exec(elem0.innerHTML)[3]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript正则表达式替换宽度属性匹配

来自分类Dev

在 JavaScript 中替换正则表达式匹配

来自分类Dev

Javascript正则表达式仅在匹配之外替换

来自分类Dev

正则表达式匹配替换

来自分类Dev

正则表达式匹配与替换

来自分类Dev

JavaScript替换正则表达式:(

来自分类Dev

正则表达式匹配-Javascript

来自分类Dev

正则表达式匹配(JavaScript)

来自分类Dev

正则表达式匹配的javascript

来自分类Dev

正则表达式匹配(JavaScript)

来自分类Dev

匹配正则表达式-JavaScript

来自分类Dev

正则表达式与 Javascript 匹配

来自分类Dev

用属性字符串和文本替换正则表达式匹配

来自分类Dev

用属性字符串和文本替换正则表达式匹配项

来自分类Dev

在匹配的正则表达式中替换字符

来自分类Dev

正则表达式替换匹配全部而不是单个

来自分类Dev

正则表达式在python中匹配并替换

来自分类Dev

在替换中处理正则表达式匹配

来自分类Dev

Java:替换匹配正则表达式中的字符

来自分类Dev

替换正则表达式匹配中的命名组

来自分类Dev

替换所有与正则表达式匹配的事件

来自分类Dev

使用匹配的正则表达式代码替换单词

来自分类Dev

正则表达式匹配,但sed无法替换

来自分类Dev

正则表达式替换-删除不匹配的值

来自分类Dev

.NET正则表达式匹配并替换

来自分类Dev

替换与特定正则表达式不匹配的字符

来自分类Dev

替换正则表达式匹配中的特定字符

来自分类Dev

Notepad ++正则表达式替换,使用匹配变量

来自分类Dev

正则表达式匹配并替换为模式