正则表达式提取超过需要的一个符号

时间:2015-08-18 15:55:01

标签: javascript regex

我需要从字符串中提取数字:

var ss = klase.match(/[col-lg-]\d+/);

但是,它会提取-1,而不仅仅是1

为什么会这样?

字符串示例:draggable ui-draggable ui-draggable-handle dragged col-lg-8

4 个答案:

答案 0 :(得分:4)

  

字符串示例:draggable ui-draggable ui-draggable-handle dragged col-lg-8

基于此,您不希望单独匹配字符(这是[]所做的),您希望字面上匹配col-lg-#。如果是这样的话。并且由于您还希望仅获取该数字,请将\d+包装在捕获组中,该捕获组将在字符串的.match()中返回。

/col-lg-(\d+)/

这可能会更好地满足您的需求。

在脚本中使用它:

var example = 'draggable ui-draggable ui-draggable-handle dragged col-lg-8';
var colNum = example.match(/col-lg-(\d+)/)[1];

console.log(colNum);
// 8

答案 1 :(得分:0)

只需将预期结果分组:

/col-lg-(\d+)/

示例:

var output = 'col-lg-1'.match(/col-lg-(\d+)/),
    result = output[1]; // first group - result: 1

答案 2 :(得分:0)

用括号替换括号:

var ss = klase.match(/(col-lg-)\d+/);

答案 3 :(得分:0)

如果您想在匹配1之前检查模式col-lg(正如我在您的问题中所假设的那样),请考虑使用正则表达式:(?=[^col-lg-])\d+,它会检查col-lg-是否在您的号码之前。

然后简单地让你的比赛回复:

//assuming that klasses contains col-lg-2 for example

var ss = klase.match(/(?=[^col-lg-])\d+/);
var result = ss[0]; //result has now the number you wanted, 2