5

我想将大部分字符串转换为小写,除了括号内的那些字符。将括号外的所有内容转换为小写后,我想删除括号。因此,{H}ell{o} World作为输入的给予应该Hello world作为输出给予。删除括号很简单,但是有没有办法使用正则表达式选择性地将括号外的所有内容变为小写?如果没有简单的正则表达式解决方案,那么在 javascript 中执行此操作的最简单方法是什么?

4

4 回答 4

2

你可以试试这个:

var str='{H}ell{o} World';

str = str.replace(/{([^}]*)}|[^{]+/g, function (m,p1) {
    return (p1)? p1 : m.toLowerCase();} );

console.log(str);

模式匹配:

{([^}]*)}  # all that is between curly brackets
           # and put the content in the capture group 1

|          # OR

[^{]+      # anything until the regex engine meet a {
           # since the character class is all characters but {

回调函数有两个参数:

m完整的比赛

p1第一个捕获组

p1如果不为空,则返回小写p1的整个匹配m项。

细节:

"{H}"    p1 contains H (first part of the alternation)
         p1 is return as it. Note that since the curly brackets are
         not captured, they are not in the result. -->"H"

"ell"    (second part of the alternation) p1 is empty, the full match 
         is returned in lowercase -->"ell"

"{o}"    (first part) -->"o"

" World" (second part) -->" world"
于 2013-06-15T22:44:51.287 回答
1

我认为这可能是您正在寻找的内容: Change case using Javascript regex

在第一个花括号而不是连字符上检测。

于 2013-06-15T22:19:00.287 回答
1

假设所有括号都很好平衡,应该小写的部分是这样包含的:

  1. 左侧是字符串的开头或}
  2. 右手边是你的字符串的末端或{

这是可行的代码:

var str = '{H}ELLO {W}ORLD';

str.replace(/(?:^|})(.*?)(?:$|{)/g, function($0, $1) {
    return $1.toLowerCase();
});
// "Hello World"
于 2013-06-16T04:36:00.760 回答
0

我将修改@Jack 的解决方案如下:

var str = '{H}ELLO {W}ORLD';

str = str.replace (/(?:^|\})(.*?)(?:\{|$)/g, function($0, $1) {
  return $1.toLowerCase ();
});

一次操作即可完成下壳和支架的拆卸!

于 2013-06-16T06:04:19.087 回答