1

所以一个子字符串可以有两个参数,开始的索引和停止的索引,就像这样

   var str="Hello beautiful world!";
   document.write(str.substring(3,7));

但是有没有办法将起点和终点指定为一组要抓取的字符,所以不是起点是 3,我希望它是“lo”,而不是终点是 7,我希望它成为“wo”,所以我会抓住“lo beautiful wo”。是否已经有一个 Javascript 函数可以达到这个目的?

4

5 回答 5

5

听起来您想改用正则表达式和 string.match() :

var str="Hello beautiful world!";
document.write(str.match(/lo.*wo/)[0]); // document.write("lo beautiful wo");

注意,match() 返回一个匹配数组,如果没有匹配,它可能为空。所以你应该包括一个空检查。

如果您不熟悉正则表达式,这是一个很好的来源: http ://www.w3schools.com/jsref/jsref_obj_regexp.asp

于 2012-12-15T04:56:01.757 回答
2

使用方法indexOf
document.write(str.substring(3,str.indexOf('wo')+2));

于 2012-12-15T04:52:05.793 回答
2

是的,您可以使用正则表达式轻松做到这一点:

var substr = /lo.+wo/.exec( 'Hello beautiful world!' )[0];
console.log( substr ); //=> 'lo beautiful wo'
于 2012-12-15T04:54:03.037 回答
0

正则表达式或许能在一定程度上做到这一点,但是有很多细节是你必须要注意的。

例如,如果要查找以 开头"lo"并以最近的 "wo"after结尾的所有子字符串"lo"。(如果有超过 1 个匹配项,后续匹配项将选取最后一个匹配项"lo"之后的第"wo"一个匹配项)。

"Hello beautiful world!".match(/lo.*?wo/g);

使用 RegExp 构造函数,您可以使其更加灵活(您可以用您想要查找的实际字符串替换它)"lo""wo"

"Hello beautiful world!".match(new RegExp("lo" + ".*?" + "wo", "g"));

重要提示: 上述 RegExp 方法的缺点是,您需要知道哪些字符是特殊的才能对它们进行转义 - 否则,它们将与您要查找的实际子字符串不匹配。


它也可以用 实现indexOf,尽管有点脏。对于第一个子字符串:

var startIndex = str.indexOf(startString);
var endIndex =  str.indexOf(endString, startIndex);
if (startIndex >= 0 && endIndex >= 0)
    str.substring(startIndex, endIndex + endString.length)

如果要查找字符串中以第一个开头"lo"并以最后一个结尾的子"wo"字符串,可以使用indexOfandlastIndexOf来查找它(对上面的代码稍作修改)。RegExp 也可以做到这一点,通过在上面的两个示例中更改.*?.*(最多会有 1 个匹配项,因此末尾的“g”标志是多余的)。

于 2012-12-15T04:56:32.107 回答
0

使用正则表达式兄弟:

   if (/(lo.+wo)/.test("Hello beautiful world!")) {
    document.write(RegExp.$1);
   }

您需要一个备份计划,以防字符串不匹配。因此使用测试。

于 2012-12-15T04:57:03.647 回答