使用jQuery查找子字符串

时间:2010-06-12 03:40:13

标签: javascript jquery regex substring

假设你有一个字符串:“ABC牛跳过XYZ月亮”你想用jQuery来获取“ABC”和“XYZ”之间的子串,你会怎么做?子串应该是“牛跳过”。非常感谢!

4 个答案:

答案 0 :(得分:6)

这与jQuery无关,jQuery主要用于DOM遍历和操作。你想要一个简单的正则表达式:

var str = "The ABC cow jumped over XYZ the moon";
var sub = str.replace(/^.*ABC(.*)XYZ.*$/m, '$1');

这个想法是你使用带有正则表达式的String.replace,它与开始和结束分隔符相匹配,并用分隔符之间匹配的部分替换整个字符串。

第一个参数是正则表达式。尾随m会使其与多行匹配,这意味着ABCXYZ之间的文字可能包含换行符。其余细分如下:

  • ^从字符串的开头
  • 开始
  • .*一系列0个或更多字符
  • ABC您的开场分隔符
  • (.*)匹配一系列0个或多个字符
  • XYZ您的结算分隔符
  • .*一系列0个或更多字符
  • $匹配字符串的结尾

第二个参数,即替换字符串,是'$ 1'。 replace将替换来自常规exprseion的括号内的子匹配 - 上面的(.*)部分。因此,返回值是整个字符串替换为分隔符之间的部分。

答案 1 :(得分:3)

你可能不需要在这个上使用jQuery。我会做这样的事情:

function between(str, left, right) {
    if( !str || !left || !right ) return null;
    var left_loc = str.indexOf(left);
    var right_loc = str.indexOf(right);
    if( left_loc == -1 || right_loc == -1 ) return null;
    return str.substring(left_loc + left.length, right_loc);
}

不保证上面的代码没有错误,但想法是使用标准的substring()函数。根据我的经验,这些类型的函数在所有浏览器中都是一样的。

答案 2 :(得分:1)

Meagar,你的解释很棒,并且清楚地解释了它的工作原理。

只是一些小问题:

  • 是否仅需要()括号作为在relpace函数的第二个参数中指示子匹配的方式,或者是否也标识子匹配:/^.*ABC.XYZ. $ /但不适用于我们在这种情况下要做的事情?

  • 此正则表达式是否有7个子匹配:

^
*
ABC
*
XYZ
*
$

  • $ 1是否意味着使用第一个带括号的子匹配?起初我认为这可能意味着在系列中使用第二个子匹配(第一个是$ 0)。

谢谢,

史蒂夫

答案 3 :(得分:0)

只是为了向您展示如何使用jQuery和meagar的正则表达式。假设您有一个包含以下P标记的HTML页面:

<p id="grabthis">The ABC cow jumped over XYZ the moon</p>

要获取字符串,您将使用以下jQuery / JavaScript混合(听起来有点愚蠢,因为jQuery是JavaScript,但是将jQuery看作JavaScript DOM库):

$(document).ready(function() { // Wait until the document has been fully loaded
  var pStr=$("#grabthis").text(); // Grab the text from the P tag and put it into a JS variable
  var subStr=pStr.replace(/^.*ABC(.*)XYZ.*$/m, '$1'); // Run the regex to grab the middle string

  alert(subStr); // Output the grabbed middle string
});

或更短的版本:

$(document).ready(function() {
  alert($("#grabthis").text().replace(/^.*ABC(.*)XYZ.*$/m, '$1'));
});

replace函数是一个JavaScript函数。我希望这可以解决这个困惑。