在动态字符串中,如何在特定字符处开始子字符串并以特定字符结束它?

时间:2015-06-24 19:25:14

标签: javascript jquery regex string

我在javascript中有字符串。

var string = "BLAH BLAH BLAH width: 673px; height: 123px; BLAH BLAH BLAH width: 1009px; height: 237px; BLAH BLAH"

我希望有两个子串出来。一个从'width'开始,以'px'结尾,一个从'height'开始,到'px'结束。

每对'width''height'都会发生这种情况。这可能会在我的字符串中出现n次。每次都有不同的宽度和高度数字。

我真的不知道如何解决这个问题,因为字符串的长度是动态的。我不能只在某个索引处开始substringsubstr并转到某个索引。我看不出如何使用splitjoin。无论如何使用jQuery或javascript做到这一点。

我目前的方式很慢......

for (var w = 1; w <= 10000; w++) {
        for(var h = 1; h<=10000; h++)
        {
            var match = text.match("style=\"width: " + w + "px; height: " + h + "px;");
            if (match != null) {
                text = text.split("style=\"width: " + w + "px; height: " + h + "px;").join('');
            }
        }
    }

找到子字符串后,我希望将它们从字符串中删除。

3 个答案:

答案 0 :(得分:2)

编辑完成后,您可以根据自己的要求执行此操作:

var string = "BLAH BLAH BLAH width: 673px; height: 123px; BLAH BLAH BLAH width: 1009px; height: 237px; BLAH BLAH";
var regExp = /(\b\w+:[^:]*px)/g
string = string.replace(regExp,'')

使用正则表达式,你可以这样做:

var string = "BLAH BLAH BLAH width: 673px; height: 123px; BLAH BLAH BLAH width: 1009px; height: 237px; BLAH BLAH";
var regExp = /(\b\w+:[^:]*px)/g
var match = regExp.exec(string);
while(match != null)
{
    var width = match[1]
    match = regExp.exec(string);
    var height = match[1]
    match = regExp.exec(string);
}

在此之后,在每次迭代中,变量width将具有子串width: 4874px,变量height将具有子串height: 898px

答案 1 :(得分:2)

在另外两个字符串之间提取字符串的一种优雅方法是向String对象添加一个函数。

    /**
     * Extract a string between a Prefix and a Suffix
     *
     * @param prefix {string} Prefix string
     * @param suffix {string} Suffix string
     * @param trimSpace {boolean} (optional default false) is string space trimmed
     * @returns {string} String between prefix and suffix
     */
    String.prototype.between = function(prefix, suffix, trimSpace) {
      trimSpace = typeof trimSpace !== 'undefined' ? trimSpace : false;

      var thisString = this;
      var index = thisString.indexOf(prefix);
      if (index >= 0) {
        thisString = thisString.substring(index + prefix.length);
      } else {
        return "";
      }
      if (suffix) {
        index = thisString.indexOf(suffix);
        if (index < 0) {
          return "";
        } else {
          thisString = thisString.substring(0, index);
        }
      }
      return trimSpace ? thisString.trim() : thisString;
    }

    var theString = "*Other text that is dynamic in length* width: 4874px; height: 898px *more dynamic length text*"

    var width = theString.between("width:", "px");
    var widthTrimmed = theString.between("width:", "px", true);
    var heightTrimmed = theString.between("height:", "px", true);
    
    document.write("Not trimmed width: width=>" + width + "<" + "<br/>");
    document.write("Trimmed width: widthTrimmed=>" + widthTrimmed + "<" + "<br/>");
    document.write("Trimmed height: heightTrimmed=>" + heightTrimmed + "<" + "<br/>");

  
<body></body>

答案 2 :(得分:1)

假设格式保持不变,获得宽度/高度索引,px应该足够

&#13;
&#13;
comN
&#13;
&#13;
&#13;