获取数字之间的字符串内容

时间:2011-09-03 17:01:48

标签: javascript regex

有正则表达式问题:(

我想要做的是找出两个或更多数字之间的内容。

var string = "90+*-+80-+/*70"

我试图编辑两者之间的符号,因此它只显示最后一个符号,而不是之前的符号。所以试图让上面的变量变成90 + 80 * 70。虽然这只是一个例子我不知道如何做到这一点。数字的长度,数字的“集合”数和它们之间的符号长度可以是任何东西。

非常感谢,

史蒂夫,

6 个答案:

答案 0 :(得分:2)

诀窍在于分别匹配'90 + - +'和'80 - + / ',并且只选择数字和最后一个常数。

用于查找一个数字后跟一个或多个非数字的表达式将是

\d+[^\d]+

要选择号码和最后一个非号码,请添加parens:

(\d+)[^\d]*([^\d])

最后添加/g以重复每个匹配的过程,并将其替换为每个匹配的2个匹配组:


js> '90+*-+80-+/*70'.replace(/(\d+)[^\d]*([^\d])/g, '$1$2');   
90+80*70
js>

答案 1 :(得分:1)

您可以使用正则表达式匹配非数字和回调函数来处理匹配并决定要替换的内容:

var test = "90+*-+80-+/*70";
var out = test.replace(/[^\d]+/g, function(str) {
    return(str.substr(-1));
})

alert(out);

在此处查看:http://jsfiddle.net/jfriend00/Tncya/

这可以通过使用正则表达式来匹配非数字序列,然后用匹配序列中的最后一个字符替换该非数字序列。

答案 2 :(得分:1)

或者你可以使用超前断言并简单地删除所有不是最后的非数字字符:"90+*-+80-+/*70".replace(/[^0-9]+(?=[^0-9])/g,'');

答案 3 :(得分:0)

首先使用this tutorial,然后查看this以查找特定于javascript的正则表达式问题。

答案 4 :(得分:0)

这应该这样做 -

var string = "90+*-+80-+/*70"
var result = '';
var arr = string.split(/(\d+)/)
for (i = 0; i < arr.length; i++) {
    if (!isNaN(arr[i])) result = result + arr[i];
    else result = result + arr[i].slice(arr[i].length - 1, arr[i].length);
}
alert(result);

工作演示 - http://jsfiddle.net/ipr101/SA2pR/

答案 5 :(得分:0)

  1. @Arnout Engelen

    类似
    var string = "90+*-+80-+/*70";
    
    string = string.replace(/(\d+)[^\d]*([^\d])(?=\d+)/g, '$1$2'); 
    

    这是我第一次考虑RegEx应该如何执行,它还展望未来确保非数字模式后跟另一个数字,这就是问题所要求的(两个数字之间)

  2. @jfriend00

    类似
    var string = "90+*-+80-+/*70";
    
    string = string.replace( /(\d+?)([^\d]+?)(?=\d+)/g
                           , function(){
                                return arguments[1] + arguments[2].substr(-1);
                           });
    

    不是只匹配非数字,而是匹配两个数字之间的非数字,这就是问题


  3. 为什么会更好?

    1. 如果您的等式嵌入在段落或文本字符串中。像:

        

      这是一个测试,我想要清理像90 + * - + 80 - + / * 70这样的东西,并且不想废弃整个段落。

      结果( 预期 ):

        

      这是一个测试,我希望清理像90 + 80 * 70这样的东西,并且不想废弃整个段落。

    2. 为什么这不会更好?

      1. 模式匹配更多,理论上它更慢(可忽略不计)
      2. 如果您的段落嵌入了数字,则会失败。像:

          

        这是一个Sally从超市购买了4个鸡蛋的段落,但只有3个鸡蛋成了一个。

        结果( 意外 ):

          

        这是一个段落,莎莉买了4个,其中3个单件重新组成。