Javascript RegEx - 我希望匹配第一次出现以外的模式

时间:2010-11-11 19:23:41

标签: javascript regex

我想转换一下:

.className#lets.par.ty

对此:

.className[id="lets"][class="par"][class="ty"]

我不想改变“。”的第一个实例。

这是我提出的,但我知道这绝对不理想:

cssOutput[i] = cssOutput[i]
.replace (/^#/,'?') // convert all start ids to ?    
.replace (/#([^\.#]+)/g,'[id="$1"]') // insert [id=""]
.replace (/\?/g,'#') // convert all start ? back to ids
.replace (/^\./,'?') // convert all start classes to ?   
.replace (/\.([^\.#]+)/g,'[class="$1"]') // insert [class=""]
.replace (/\?/g,'.') // convert all start ? back to classes

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

尝试:

var s = ".className#lets.par.ty";
s = s.replace(/\.(\w+)#(\w+)\.(\w+)\.(\w+)/, '.$1[id="$2"][class="$3"][class="$4"]');

演示:http://ideone.com/51XkY

修改

要跳过输入的第一个第一个字符,只需执行以下操作:

var tests = ['.className1', '#className2', '.className.class1#class2#class3'];

for(var index in tests) {

  var t = tests[index];

  t = t.charAt(0) + t.substring(1).
      replace(/\.(\w+)/g, '[class="$1"]').
      replace(/#(\w+)/g,  '[id="$1"]');

  print(t);
}

产生:

.className1
#className2
.className[class="class1"][id="class2"][id="class3"]

在线测试:http://ideone.com/YmJGu

答案 1 :(得分:1)

你可以通过将它包含在负向前瞻中来反转锚的含义:

s = s.replace(/(?!^)\.(\w+)/g, '[class="$1"]')
     .replace(/(?!^)#(\w+)/g,  '[id="$1"]');

See it in action on ideone.