首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清理文本:从ALLCAPS到<em>allcaps</em>

清理文本:从ALLCAPS到<em>allcaps</em>
EN

Stack Overflow用户
提问于 2011-11-25 18:26:34
回答 4查看 180关注 0票数 0

我需要为html清理一些使用ALLCAPS而不是斜体的文本。所以我想用一个类似这样的东西:

代码语言:javascript
复制
Here is an artificial EXAMPLE of a piece of TEXT that
uses allcaps as a way of EMPHASIZING words.

并将其转换为:

代码语言:javascript
复制
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++对其进行标记,但是(正如您可能会说的那样)我不知道如何使用它们。

EN

回答 4

Stack Overflow用户

发布于 2011-11-25 18:50:56

Notepad++正则表达式引擎没有这样的可能性。

您可以在Perl中运行执行此工作的脚本,例如:

代码语言:javascript
复制
perl -pi.back -e "s#\b([A-Z]+)\b#'<em>'.lc($1).'</em>'/eg" yourfile.html

yourfile.html将保存在yourfile.html.back

票数 2
EN

Stack Overflow用户

发布于 2011-11-25 18:33:59

下面是如何使用JavaScript的字符串替换方法来完成此操作:

代码语言: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);
};

要执行此操作,只需调用:

代码语言:javascript
复制
capfix(yourData);

这里假设"yourData“只是一个将数据表示为字符串的变量。如果你想使用web工具,那么"yourData“可以表示来自某些输入控件的值,如下所示:

代码语言:javascript
复制
var yourData = document.getElementById("myinput").value;
alert(capfix(yourData));

要做到这一点,只需在您的web工具输入上添加一个id属性,例如:

代码语言:javascript
复制
<textarea id="myinput"></textarea>
票数 0
EN

Stack Overflow用户

发布于 2011-11-25 18:46:51

据我所知,Notepad++的regex engine还不够先进,无法做到这一点。

我建议使用编程语言来实现这一点,例如,在PHP中,您可以这样做:

代码语言:javascript
复制
echo preg_replace_callback('/([A-Z]{2,})/', create_function('$s', 'return "<em>".strtolower($s[0])."</em>";'), $s);

确保在regex中排除单个单词的legitim第一个大写字母。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8267667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档