所以一个子字符串可以有两个参数,开始的索引和停止的索引,就像这样
var str="Hello beautiful world!";
document.write(str.substring(3,7));
但是有没有办法将起点和终点指定为一组要抓取的字符,所以不是起点是 3,我希望它是“lo”,而不是终点是 7,我希望它成为“wo”,所以我会抓住“lo beautiful wo”。是否已经有一个 Javascript 函数可以达到这个目的?
所以一个子字符串可以有两个参数,开始的索引和停止的索引,就像这样
var str="Hello beautiful world!";
document.write(str.substring(3,7));
但是有没有办法将起点和终点指定为一组要抓取的字符,所以不是起点是 3,我希望它是“lo”,而不是终点是 7,我希望它成为“wo”,所以我会抓住“lo beautiful wo”。是否已经有一个 Javascript 函数可以达到这个目的?
听起来您想改用正则表达式和 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
使用方法indexOf
:document.write(str.substring(3,str.indexOf('wo')+2));
是的,您可以使用正则表达式轻松做到这一点:
var substr = /lo.+wo/.exec( 'Hello beautiful world!' )[0];
console.log( substr ); //=> 'lo beautiful wo'
正则表达式或许能在一定程度上做到这一点,但是有很多细节是你必须要注意的。
例如,如果要查找以 开头"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"
字符串,可以使用indexOf
andlastIndexOf
来查找它(对上面的代码稍作修改)。RegExp 也可以做到这一点,通过在上面的两个示例中更改.*?
为.*
(最多会有 1 个匹配项,因此末尾的“g”标志是多余的)。
使用正则表达式兄弟:
if (/(lo.+wo)/.test("Hello beautiful world!")) {
document.write(RegExp.$1);
}
您需要一个备份计划,以防字符串不匹配。因此使用测试。