正则表达式找到CamelCase字符串和短划线,替换为lowercase_underscored

时间:2013-02-07 17:03:41

标签: regex phpstorm

在PHPStorm中,我需要查找/替换一些用于CSS类名和DOM id的混合大小写字符串。我无法更改onClick等属性,并且需要保留图片名称。这就是我所拥有的:

<div class="ThumbContainer" id="Source-Data4-Thumb">
<div class="ThumbTitleArea">
    <div class="DataTitleDiv"> GYR Performance <img src="images/someImage.png" onClick="someFunc()" /></div>
</div>
    <div class="dataDetailArea">
    <div class="DataThumbArea"> Data Source:Client<br>
                    Last refreshed:12/05/2013 <br>
                    Records:206<br>
        <br>
                        Used for the following reports<br>
                -    GYR Performance<br>
        </div>
</div>
</div>

这就是我需要的:

<div class="thumb_container" id="source_data4_thumb">
<div class="thumb_title_area">
    <div class="data_title_div"> GYR Performance <img src="images/someImage.png" onClick="someFunc()" /></div>
</div>
    <div class="data_detail_area">
    <div class="data_thumb_area"> Data Source:Client<br>
                      Last refreshed:12/05/2013 <br>
                      Records:206<br>
        <br>
                          Used for the following reports<br>
                 -    GYR Performance<br>
        </div>
</div>
</div>

请注意,dataDetailArea以小写字母.. bleh开头。这将是一次性查找/替换,因此它不需要在PHPStorm中。它甚至可以在任何在线工具中使用,例如http://gskinner.com/RegExr/

我需要查找/替换的实际主干模板大约有3100行代码,否则我会在这里为您提供。

这是我到目前为止所拥有的。它似乎与Camel-Case3-Foo

不匹配
(class|id|data-[?!=])="\b([A-Za-z][a-z-]*){2,}\b"

2 个答案:

答案 0 :(得分:2)

此正则表达式应找到应放置下划线的位置:

((?<=\w)(?=[A-Z])|-)

使用此替换来插入下划线似乎是有意义的,然后将字符串转换为小写。

答案 1 :(得分:0)

我会搜索这样的东西:

"[a-z0-9_]*\([A-Z]\)

后面带有小写,数字或下划线字符的引号。 之后的任何内容都有一个大写字母。 使大写字母子表达式为1。

用下划线替换子表达式1 + tolower()函数的结果。

您需要多次对每一行应用此项,因为它只会找到一行 每次通过大写字母。