我需要为html清理一些使用ALLCAPS而不是斜体的文本。所以我想用一个类似这样的东西:
Here is an artificial EXAMPLE of a piece of TEXT that
uses allcaps as a way of EMPHASIZING words.并将其转换为:
Here is an artificial <em>example</em> of a piece of <em>text</em> that
uses allcaps as a way of <em>emphasizing</em> words.我使用正则表达式和notepad++对其进行标记,但是(正如您可能会说的那样)我不知道如何使用它们。
发布于 2011-11-25 18:50:56
Notepad++正则表达式引擎没有这样的可能性。
您可以在Perl中运行执行此工作的脚本,例如:
perl -pi.back -e "s#\b([A-Z]+)\b#'<em>'.lc($1).'</em>'/eg" yourfile.htmlyourfile.html将保存在yourfile.html.back中
发布于 2011-11-25 18:33:59
下面是如何使用JavaScript的字符串替换方法来完成此操作:
var capfix = function (x) {
var emout = function (y) {
y = y.charAt(0) + "<em>" + y.toLowerCase() + "</em>" + y.charAt(y.length - 1);
};
return x.replace(/\s[A-Z]\s/g, emout);
};要执行此操作,只需调用:
capfix(yourData);这里假设"yourData“只是一个将数据表示为字符串的变量。如果你想使用web工具,那么"yourData“可以表示来自某些输入控件的值,如下所示:
var yourData = document.getElementById("myinput").value;
alert(capfix(yourData));要做到这一点,只需在您的web工具输入上添加一个id属性,例如:
<textarea id="myinput"></textarea>发布于 2011-11-25 18:46:51
据我所知,Notepad++的regex engine还不够先进,无法做到这一点。
我建议使用编程语言来实现这一点,例如,在PHP中,您可以这样做:
echo preg_replace_callback('/([A-Z]{2,})/', create_function('$s', 'return "<em>".strtolower($s[0])."</em>";'), $s);确保在regex中排除单个单词的legitim第一个大写字母。
https://stackoverflow.com/questions/8267667
复制相似问题