假设你有一个字符串:“ABC牛跳过XYZ月亮”你想用jQuery来获取“ABC”和“XYZ”之间的子串,你会怎么做?子串应该是“牛跳过”。非常感谢!
答案 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
会使其与多行匹配,这意味着ABC
和XYZ
之间的文字可能包含换行符。其余细分如下:
^
从字符串的开头.*
一系列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
*
$
谢谢,
史蒂夫
答案 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函数。我希望这可以解决这个困惑。