只有在没有以某些字符开头的情况下才获取字符串?

时间:2014-09-04 19:53:24

标签: javascript regex

我的字符串是:

'{ color : rgb(0,0,0);background-color : rgb(255, 255, 255);}'

我想要匹配颜色和背景。

我的正则表达式是

a = new RegExp(prop + '[^;]+?\\;','g');

,其中

prop = `color` or `background-color`

背景匹配很好,但颜色匹配。我试过了

a =new RegExp('[^d-]'+prop + '[^;]+?\\;','g');

匹配;background-color : rgb(255, 255, 255);,但我只想background-color : rgb(255, 255, 255);

1)我如何得到它?
2)如果我想从字符串中删除background-color,那么regexp是什么?

2 个答案:

答案 0 :(得分:1)

您可以先使用此正则表达式匹配所有属性:

/([\w-]+)\s*:\s*(.+?)[;}]/g

使用此输入:

var css = '{\
    color: rgb(0,0,0);\
    background-color: rgb(255, 255, 255);\
    font-size: 2em;\
    margin: 0;\
    padding: 4px;\
    font-style: italic;\
    text-align: center;\
  }'

它给出了这个输出:

var output = {}

s.replace(/([\w-]+)\s*:\s*(.+?)[;}]/g, function(_, k, v) {
  output[k] = isNaN(v) ? v : +v // cast number if necessary
})

console.log(output)
/*^ { color: 'rgb(0,0,0)',
      'background-color': 'rgb(255, 255, 255)',
      'font-size': '2em',
      margin: 0,
      padding: '4px',
      'font-style': 'italic',
      'text-align': 'center' }
*/

然后您可以动态访问所需的键:

var prop = 'color'
output[prop] //=> rgb(0,0,0)

答案 1 :(得分:0)

您可以使用此正则表达式并使用已捕获的组#1代替:

var prop = 'color';
var re =  new RegExp('([^-])' + prop + '\\s*:[^;]+\;');

var s = '{color : rgb(0,0,0);background-color : rgb(255, 255, 255);}'
var r = s.replace(re, '$1 '); // replaces color property by a space
//=> { background-color : rgb(255, 255, 255);}