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

getting contents of string between digits

本文关键字:字符串 数字 之间 获取      更新时间:2023-09-26

有一个正则表达式问题:(

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

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

我试图编辑之间的符号,所以它只显示最后一个符号,而不是之前的符号。试着把上面的变量变成90+80*70。虽然这只是一个例子,我不知道如何做到这一点。数字的长度,数字"集合"的数量以及中间符号的长度可以是任何值

many thanks,

史蒂夫,

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

查找后面跟着1个或多个非数字的数字的表达式为

'd+[^'d]+

To select the number and the last non-number, add parens:

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

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


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

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

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

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

查看它的工作原理:http://jsfiddle.net/jfriend00/Tncya/

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

我将首先使用本教程,然后针对特定于javascript的正则表达式问题复习本教程。

应该可以了-

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/

  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);
                           });
    

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


为什么会更好呢?

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

    在这个测试中,我想要清理像90+*-+80-+/*70这样的内容,并且不想废弃整个段落。

    Result (Expected):

    这是一个测试,我想清理一些像90+80*70,不想废弃整个段落。

为什么不能更好呢?

  1. 有更多的模式匹配,这使得它在理论上更慢(可忽略)
  2. 如果你的段落嵌入了数字,它将失败。如:

    萨莉从超市买了4个鸡蛋,但是只有3个完好无损地回来了。

    结果(意想不到的):

    这是莎莉买了43个的段落,其中3个是完整的。