如何在角色前获得一个词?

时间:2017-03-13 01:36:30

标签: javascript regex

如何获取'x'之前的数字?

我尝试使用.split('x')[0],但它会抓住'x'之前的所有内容。

123x // Gives 123
123y+123x - // Gives 123
123x+123x - // Gives 246

4 个答案:

答案 0 :(得分:0)



ggplot(d, aes(x, y)) +
  stat_smooth(method = "glm", method.args = list(family = "binomial")) +
  geom_point(data = fitted, aes(x, y))




答案 1 :(得分:0)

您可以尝试以下操作:

var a='123x';
var b='123y+123x';
var c='123x+123x';
var patternX = /(\d+)x/g;

function result(res, value){
  return res += parseInt(value.replace('x', ''));
}

var first = a.match(patternX).reduce(result, 0);
var second = b.match(patternX).reduce(result, 0);
var third = c.match(patternX).reduce(result, 0);

console.log(first);
console.log(second);
console.log(third);

答案 2 :(得分:0)

我测试了一个使用我认为可行的正则表达式的函数。我已经包含了结果,该函数如何工作的解释,然后是该函数的注释版本。

注意,这并不能处理比​​添加和减去简单术语更复杂的代数。我会参考https://newton.now.sh/,它是一个可以处理简化的API(我没有附属)。

结果:

console.log(coefficient("-x+23x"));     // 22
console.log(coefficient("123y+123x"));  // 123
// replaces spaces
console.log(coefficient("x + 123x"));   // 124
console.log(coefficient("-x - 123x"));  // -124
console.log(coefficient("1234x-23x"));  // 1211
// doesn't account for other letters
console.log(coefficient("-23yx"));      // 1

说明:

首先,该函数删除空格。然后它使用正则表达式,它找到任何数字序列,后跟一个' x'。如果前面有+/-,那么正则表达式就是这样。该函数循环遍历这些数字序列,并将它们添加到总数中。如果有' x'如果没有数字,则系数假定为-1或1。

评论代码:

function coefficient(str) {
  // remove spaces
  str = str.replace(/\s/g, '');

  // all powerful regex
  var regexp = /(\+|-)?[0-9]*x/g

  // total
  sum = 0;

  // find the occurrences of x
  var found = true;
  while (found) {
    match = regexp.exec(str);
    if (match == null) {
      found = false;
    } else {
      // treated as +/- 1 if no proceeding number
      if (isNaN(parseInt(match[0]))) {
        if (match[0].charAt(0) == "-") {
          sum--;
        } else {
          sum++;
        }
      // parse the proceeding number
      } else {
        sum += parseInt(match[0]);
      }
    }
  }
  return sum;
}

答案 3 :(得分:0)

我不知道ECMAScript正则表达式中是否有足够的聪明才能看后面,但您可以使用 match 进行处理并删除“x”。

如果打算对术语求和,则需要使用 reduce 进行进一步操作。修剪x可以与reduce结合使用,因此不需要 map

console.log(
  '123x+123x'.match(/\d+x/ig).map(function(v){
    return v.slice(0,-1)
  }).reduce(function(sum, v){return sum + +v},0)
);