Javascript 使用jQuery查找子字符串
假设您有一个字符串:“ABC奶牛跳过了XYZ月亮”,您想使用jQuery获得“ABC”和“XYZ”之间的子字符串,您将如何做到这一点?子字符串应该是“cow jumped over”。非常感谢 这与jQuery无关,jQuery主要用于DOM遍历和操作。您需要一个简单的正则表达式:Javascript 使用jQuery查找子字符串,javascript,jquery,regex,substring,Javascript,Jquery,Regex,Substring,假设您有一个字符串:“ABC奶牛跳过了XYZ月亮”,您想使用jQuery获得“ABC”和“XYZ”之间的子字符串,您将如何做到这一点?子字符串应该是“cow jumped over”。非常感谢 这与jQuery无关,jQuery主要用于DOM遍历和操作。您需要一个简单的正则表达式: var str = "The ABC cow jumped over XYZ the moon"; var sub = str.replace(/^.*ABC(.*)XYZ.*$/m, '$1'); 其思想是使用一
var str = "The ABC cow jumped over XYZ the moon";
var sub = str.replace(/^.*ABC(.*)XYZ.*$/m, '$1');
其思想是使用一个正则表达式来匹配开始和结束分隔符,并用分隔符之间匹配的部分替换整个字符串
第一个参数是正则表达式。尾随的m
使其在多行上匹配,这意味着ABC
和XYZ
之间的文本可能包含换行符。其余的细分如下:
从字符串开头开始^
一系列0个或更多字符*
您的开头分隔符ABC
匹配一系列0个或更多字符(.*)
结束分隔符XYZ
一系列0个或更多字符*
匹配字符串的末尾$
第二个参数是替换字符串“$1”<代码>替换将替换常规表达式中括号内的子节-上面的
(.*)
部分。因此,返回值是用分隔符之间的部分替换的整个字符串。您可能不需要在这个字符串上使用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);
}
不保证上述代码没有bug,但其思想是使用标准函数。根据我的经验,这些类型的函数在所有浏览器中都是一样的。只是向您展示如何使用jQuery和meagar的regex。假设您有一个带有以下
P
标记的HTML页面:
<p id="grabthis">The ABC cow jumped over XYZ the moon</p>
或较短的版本:
$(document).ready(function() {
alert($("#grabthis").text().replace(/^.*ABC(.*)XYZ.*$/m, '$1'));
});
replace函数是一个JavaScript函数。我希望这能消除困惑。米加,你的解释很好,并且清楚地解释了它的工作原理 只有几个小问题:
- 是否需要()括号仅作为在relpace函数的第二个参数中指示子匹配的一种方式,或者这也会标识子匹配:/^.*ABC.XYZ.$/但不适用于我们在本例中尝试执行的操作
- 此正则表达式是否有7个子匹配:
.*
ABC
.*
XYZ
.*
$
- 1美元是否意味着使用第一个括号内的子匹配?起初我认为这可能意味着使用系列中的第二个子匹配(第一个子匹配是0美元)李>
Steve首先,您不需要使用jQuery进行字符串操作——这是Javascript/ECMAScript。其次,您能否更具体地说明用于获取该字符串的逻辑?有一个模式吗?问题是jQuery没有用jQueryWell标记,为什么需要jQuery?在我看来,简单的javascript不适合你,这个问题不应该用jQuery标记,因为它与jQuery无关我认为jQuery有函数:substring和indexof,它们可以一起使用来获得子字符串@Steve—JavaScript具有子字符串和indexof等功能。jQuery主要处理页面的DOM。非常感谢大家的帮助!!Meagar,你的解释很好,并且清楚地解释了它的工作原理。只有几个小问题:1。是否需要()括号仅作为在repace函数的第二个参数中指示子匹配的一种方式,或者它也会配置子匹配:/^.*ABC.*XYZ.$/但不适用于我们在本例中尝试执行的操作?2.此正则表达式是否有7个子匹配:^.*ABC.*XYZ.*3。1美元是否意味着使用第一个括号内的子匹配?起初,它认为这可能意味着在serries中使用第二个子匹配(第一个子匹配是0美元)。史蒂文:我喜欢这个是因为我讨厌正则表达式,不知道这是否是个好理由:)
$(document).ready(function() {
alert($("#grabthis").text().replace(/^.*ABC(.*)XYZ.*$/m, '$1'));
});