Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery查找子字符串_Javascript_Jquery_Regex_Substring - Fatal编程技术网

Javascript 使用jQuery查找子字符串

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'); 其思想是使用一

假设您有一个字符串:“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');
其思想是使用一个正则表达式来匹配开始和结束分隔符,并用分隔符之间匹配的部分替换整个字符串

第一个参数是正则表达式。尾随的
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'));
});