试图删除尾随文本

时间:2011-04-19 12:27:37

标签: javascript regex

我有以下代码。我想从中提取最后一个文本(hello64)。

<span class="qnNum" id="qn">4</span><span>.</span> hello64 ?*

我使用下面的代码,但它删除了所有整数

questionText = questionText.replace(/<span\b.*?>/ig, "");
questionText=questionText.replace(/<\/span>/ig, "");
questionText = questionText.replace(/\d+/g,"");

questionText = questionText.replace("*","");
questionText = questionText.replace(". ","");  i want to remove the first integer, and need to keep the rest of the integers

2 个答案:

答案 0 :(得分:0)

这是替换整数的第三行.replace(/\d+/g,"")。如果要保留整数,请不要替换\d+,因为它匹配一个或多个数字。

顺便说一句,你可以在一条线上完成所有这一切 - 不需要在那里进行多次替换:

var questionText = questionText.replace(/((<span\b.*?>)|(<\/span>)|(\d+))/ig, "");

这与代码的前三行相同。 (当然,如果您不想删除数字,则需要根据答案的第一部分删除|(\d+)

[编辑]

重新评论您要替换第一个整数而不是后续整数:

执行此操作的正则表达式字符串在很大程度上取决于可能的输入是什么样的。问题是你给了我们一些随机的HTML代码;我们不知道你是否期望它总是采用这种精确的格式(即几个带有内容的跨度,然后是最后一点保持)。我会假设情况就是这样。

在这种情况下,整个事情的一个更简单的正则表达式是将<span .... </span>中的eveything替换为空白:

var questionText = questionText.replace(/(<span\b.*?>.*?<\/span>)/ig, "");

这将消除整个<span>标记及其内容,但不要将其他内容留在其中。

在你的例子中,这将提供所需的效果,但正如我所说,很难知道这在所有情况下是否适合你,而不了解你的预期输入。

通常,使用正则表达式解析任意HTML代码很困难。正则表达式是“正则表达式”的缩写,这是一种说明他们善于处理具有“常规”语法的字符串的方式。 Abitrary HTML不是一种“常规”语法,因为它具有无限的嵌套级别。我在这里要说的是,如果你有比你提供的简单HTML片段更复杂的东西,那么最好使用HTML解析器来提取你的数据。

答案 1 :(得分:0)

这将匹配完整的字符串,并将该部分放在最后一个</span>之后,直到下一个单词边界\b进入捕获组1.您只需要将其替换为组1,即{ {1}}。

$1

捕获的单词可以包含searched_string = string.replace(/^.*<\/span>\s*([A-Za-z0-9]+)\b.*$/, "$1"); 。如果你想要其他任何东西,只需将它添加到该组中。