Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex ColdFusion 9重新替换第n次出现的HTML标记_Regex_Coldfusion_Html Parsing_Coldfusion 9 - Fatal编程技术网

Regex ColdFusion 9重新替换第n次出现的HTML标记

Regex ColdFusion 9重新替换第n次出现的HTML标记,regex,coldfusion,html-parsing,coldfusion-9,Regex,Coldfusion,Html Parsing,Coldfusion 9,我将以下HTML存储在ColdFusion 9中的一个变量中。我需要在第四个之后插入一个新表行。i、 e.在提交按钮之前 <form name="form1" id="form1" action="" method="post"> <table> <tr style="visibility:hidden;display:none;"><td> <input type="hidden" id="ref1" name="ref1"

我将以下HTML存储在ColdFusion 9中的一个变量中。我需要在第四个
之后插入一个新表行。i、 e.在提交按钮之前

<form name="form1" id="form1" action="" method="post">
    <table>
    <tr style="visibility:hidden;display:none;"><td> <input type="hidden" id="ref1" name="ref1" value="1" > </td></tr> 
    <tr style="visibility:hidden;display:none;"><td> <input type="hidden" id="ref2" name="ref2" value="2" > </td></tr> 
    <tr>
        <th style="text-align:left;">Name&nbsp;*&nbsp;</th>
        <td><input type="text" name="foo" id="foo" size="30" maxlength="50" value=""></td>
    </tr>
    <tr>
        <th title="Please enter plain text or HTML." style="cursor:help;text-align:left;">Comment&nbsp;*&nbsp;</th>
        <td><textarea name="bar" id="bar" cols="40" rows="10" ></textarea></td>
    </tr>
    <tr>
        <th colspan="1"></th>
        <td>
            <input style="width:80px" type="submit" value="Submit">
            <input style="width:80px" type="button" value="Cancel">
        </td>
    </tr>
</table>

姓名*
评论*


重新替换似乎是一个不错的方法,但我在正确使用regexp时遇到了麻烦。另一个选择是拆分字符串并用中间的新HTML重新构建它。如果您有任何建议,我们将不胜感激。

Regex是一个错误的工具,您需要一个HTML解析器

以下是您如何使用:

…仅在末尾添加新行


从Jar文件创建对象 如果您复制并粘贴它,上述代码很可能无法立即工作,因为您的服务器不知道JSoup—您需要下载Jar文件并将其放在合理的位置

对于CF9,需要将jsoup-1.6.3.jar复制到{coldfusion}/lib目录中,然后重新启动服务器

对于CF10,您可以在Application.cfc()中使用
this.JavaSettings
,将其放置在不同的位置

对于Railo和OpenBD,您可以将JAR文件的位置指定为第三个参数,例如:

​$(document).ready(function(){

   $($('form tr')[3]).after('<tr><td>row</tr></tr>');

});​

我建议使用jQuery执行此操作:

​$(文档).就绪(函数(){
$($('form tr')[3])。在('row')之后;
});​

更简单。

谢谢你的回答,彼得。我找到了一种更简单的方法来做我想做的事情,但我肯定会研究JSoup,以便将来进行HTML解析!出于好奇,什么是更简单的方法呢?我能够创建一个自定义的隐藏字段,然后我可以搜索并在字符串中进行简单替换,而不是使用regexp。受到一个古老的API的限制是令人沮丧的……jQuery是客户端(jSoup比在Rhino中运行jQuery更容易)。另外,使用
append
将内容放在目标项中,因此此答案是错误的。(在我的回答中有一个
append
after
的例子。)另外
$('formtr:eq(3)
比嵌套更简单。我已经将其更新为“after”而不是“append”。OP没有指定这需要在服务器端完成。另外,:eq选择器对性能不好哇,那:eq的东西糟透了。尽管如此,该页面还是推荐了可读性更好的
$('form tr').eq(3)
。至于客户机与服务器,在服务器上执行一次(并缓存)几乎总是比在每个客户机上重复要更好。(更不用说并非所有客户都执行JS。)谢谢您的回答。我很感激!
HtmlDom.select('table>tbody').append( NewRow )
<cfset jsoup = createObject('java','org.jsoup.Jsoup','lib/jsoup-1.6.3.jar') />
​$(document).ready(function(){

   $($('form tr')[3]).after('<tr><td>row</tr></tr>');

});​