我是使用XML的新手,并没有经过多少培训。我试图在自定义报告中正确格式化文本。我有这条线:
.replace(/(<([^>]+)>)/ig, "\n")
并希望完全了解它在做什么。我知道新的一行正在取代括号中的内容。具体来说,这是在寻找什么?
([^>]+)>)
修改(来自评论):
这是完整的表达式(为了便于阅读而重新格式化)。
<expression name="expression" type="javascript">
(
dataSetRow["Question_Employee_Comment"] +
dataSetRow["Question_Manager_Comment"]
)
.replace(/(<([^>]+)>)/ig, "\n")
.replace(/null/ig, "")
.replace(/&amp;/g, "&")
.replace(/&#39;/g,"'")
.replace(/&nbsp;/g," ")
.replace(/•/g,'\n•')
</expression>
这是这个表达式正在查看的XML(为了可读性而包装):
<wd:Question_Employee_Comment>
<p>I don't even know where to start... Cupid wasn't @ his desk on 2/14/2015
and I'm really upset because I've been really patient with his personal needs.
Santa &amp; I sat him down and have discussed why his attendance is important
to success.</p><p></p><p>He's been absent
on:</p><ul><li>3/19/15</li><li>March 20,
2015</li><li>05/01/2015</li>/ul><p></p><p>All
additional dates will be documented.</p>
</wd:Question_Employee_Comment>
答案 0 :(得分:1)
此正则表达式(或 regexp )可以按如下方式细分。
(<([^>]+)>)
括号用于分组。
有时它们会被用来记住在以后的工作中使用的匹配,但我发现在这个有限的代码示例中没有发现任何证据。
有时他们习惯于允许多种替代选择(例如(a|b|c)
,但我也不会在这里看到。
由于括号在这个表达式中没有做任何事情,至少没有匹配,所以让我们忽略它们。这留下了:
<[^>]+>
其中一半只是要匹配的文字字符。匹配的开头必须是文字的4个字符的字符串<
,字符串的结尾是文字字符>
。中间是唯一的正则表达式。
[^>]+
方括号表示字符类。在字符类中,如果^
是第一个字符,就像它在这里一样,那么它就是反向字符类,也就是说,它意味着“匹配不是这些东西“。所以,这个角色类说“匹配不是>
的东西。”
字符类之后的+
被称为量词,它意味着“这个东西中的一个或多个”。
因此,合在一起意味着“一件或多件事不是>
。”
整个表达方式意味着:匹配<
后跟一个或多个非>
的内容,后跟>
。
表达式后面有两个标记i
和g
。 i
表示不区分大小写。它在这里没有做任何事情,因为你的表达式没有按字母顺序排列的匹配字符。 g
标志表示全局匹配,也就是说,如果输入有多个匹配,则匹配所有匹配,而不是仅匹配第一种情况。
现在,看一下您的示例XML,我相信该表达式会进行大量编辑。请注意,您仅发布了<wd:Question_Employee_Comment>
的内容,但该表达式实际上同时对<wd:Question_Manager_Comment>
的内容进行操作(如果有值)。我不会在这里评论<wd:Question_Manager_Comment>
,因为你没有发布它包含的内容。
<p>
之前的前导I don't even
将被换行替换。important to success
之后,</p><p></p><p>
将替换为4个换行符。absent on
之后,</p><ul><li>
将替换为3个换行符。3/19/15
之后,</li><li>
将替换为2个换行符。March 20, 2015
之后,</li><li>
将替换为2个换行符。5/01/2015
之后,</li>
将替换为换行符。All additional
之前,`&lt; p&gt;&lt; / p&gt;&lt; p&gt;将由3个换行符替换。</p>
将替换为换行符。请注意,表达式/ul>
会遗漏部分标记。
结果:
<wd:Question_Employee_Comment>
\nI don't even know where to start... Cupid wasn't @ his desk on 2/14/2015
and I'm really upset because I've been really patient with his personal needs.
Santa &amp; I sat him down and have discussed why his attendance is important
to success.\n\n\n\nHe's been absent
on:\n\n\n3/19/15\n\nMarch 20,
2015\n\n05/01/2015\n/ul>\n\n\nAll
additional dates will be documented.\n
</wd:Question_Employee_Comment>
这是你特别询问的.replace()
。完整表达也可以完成进一步的工作,例如将&amp;
固定为&
,并完成其他工作。我没有在这里进行所有这些转换,因为那些转换不是你提出的核心问题的一部分,但如果你不理解这些部分,可以详细说明。
答案 1 :(得分:1)
replace
函数将用新行字符替换所有XML标记,留下没有任何标记的纯文本。
备注:强>
replace
函数适用于XML;它不是XML
本身。