匹配两个字符串之间的字符串
Match string in between two strings
如果我有这样的字符串:
var str = "play the Ukulele in Lebanon. play the Guitar in Lebanon.";
我想在每个子弦"play"和"in"之间获取字符串,所以基本上是一个带有"Ukelele"和"The Guitar"的数组。
现在我正在做:
var test = str.match("play(.*)in");
但这是在第一个"播放"和最后一个"进入"之间返回字符串,所以我得到了"黎巴嫩的尤克里里。弹吉他"而不是 2 根单独的弦。有谁知道如何全局搜索字符串以查找开始字符串和结束字符串之间子字符串的所有出现次数?
您可以使用正则表达式
play's*(.*?)'s*in
- 使用
/
作为正则表达式文本语法的分隔符 - 使用惰性组匹配最小可能
演示:
var str = "play the Ukulele in Lebanon. play the Guitar in Lebanon.";
var regex = /play's*(.*?)'s*in/g;
var matches = [];
while (m = regex.exec(str)) {
matches.push(m[1]);
}
document.body.innerHTML = '<pre>' + JSON.stringify(matches, 0, 4) + '</pre>';
你离正确答案很近。 您可能会忽略一些事情:
- 您需要匹配是非贪婪的,这可以通过使用
?
运算符来完成 - 不要使用
String.match()
方法,因为它已被证明与整个模式匹配,并且不会像预期的那样注意捕获组。 另一种方法是使用RegExp.exec()
或String.replace()
,但使用 replace 需要更多的工作,因此请坚持使用 exec 构建自己的数组
var str = "display the Ukulele in Lebanon. play the Guitar in Lebanon.";
var re = /'bplay (.+?) in'b/g;
var matches = [];
var match;
while ( match = re.exec(str) ){
matches[ matches.length ] = match[1];
}
document.getElementById('demo').innerHTML = JSON.stringify( matches );
<pre id="demo"></pre>
/'bplay's+(.+?)'s+in'b/ig
可能更具体,可能更适合您。
我相信之前提供的正则表达式可能存在一些问题。例如,/play's*(.*?)'s*in/g
会在"按顺序播放照片"中找到匹配项。当然这不是你想要的。其中一个问题是,没有规定"玩"应该是一个离散的词。 它前面需要一个单词边界,之后至少需要一个空格实例(它不能是可选的)。 同样,捕获组后面的空格不应是可选的。
/play (.+?) in/g
,我添加这个时提供的另一个表达式缺少"play"之前和"in"之后的边界标记一词,因此它将包含"display blue ink"中的匹配项。 这不是你想要的。
至于你的表达,它也缺少边界和空格标记这个词。 但正如另一个人提到的,它还需要通配符来偷懒。否则,给定您的示例字符串,您的匹配将从"play"的第一个实例开始,以第二个实例"in"结束。
如果发现我提供的表达式有问题,将不胜感激。
贪婪匹配的受害者。
.* 找到最长的可能匹配,
而 .*? 找到尽可能短的匹配项。
对于给定的示例,str 将是一个数组或 3 个字符串,其中包含:
the Ukelele
the Guitar
Lebanon
- jsf中两个字符串的颜色代码差异
- 可以't在JavaScript中比较两个字符串
- jQuery在两个字符串标识符之间选择HTML
- 为什么脚本标记被分解为两个字符串
- 比较Javascript中的两个字符串时出错
- RegEx以匹配字符串中的两个或多个名称
- js字符串转换为具有两个值的对象
- 在数字字符串的最后两个数字上加上小数
- 如何在javascript中使用string.replace.将匹配字符串开头的两个不同表达式替换为null
- 如何检查两个字符串是否具有相同的字符,包括特殊字符
- Javascript正则表达式来比较两个字符串
- 使用Javascript获取两个字符串之间的字符串数组
- 如何比较两个字符串并删除jquery中的元素
- 在Javascript中截断一个字符串,混淆了最后两个测试字符串
- 如何在jQuery中搜索两个字符之间的字符串
- 我可以在两个javascript文件之间传递一个字符串吗?
- 将具有两个此类子字符串的字符串中的第一个子字符串生成与正则表达式匹配,正则表达式通常默认匹配最后一个子字符串
- 使用 JavaScript 中的正则表达式替换大文本中两个字符之间的每个出现的字符串
- 如何从字符串中获取两个变量
- 如何在 javascript 中使用正则表达式在其他两个字符串之间找到一个字符串