如果找到部分字符串,则返回完整字符串Javascript / Jquery

时间:2018-01-17 03:40:12

标签: javascript jquery

如果部分匹配,则无法检索完整字符串。

  

示例:

     

src ='当TAtrimg001a.svg为​​时,表达式$ a {\ color {blue} {x}} ^ 2 + b {\ color {blue} {x}} + c $被称为二次方\ neq 0 $'

     

搜索" svg" >应该返回TAtrimg001a.svg

我正在尝试搜索并找到字符串" svg"。如果" svg"然后它应该返回TAtrimg001a.svg而不仅仅是它的位置或单词svg本身,而是完整的svg文件名。

回复评论......

我尝试按照以下不同的方式找到匹配,但它们确实适用于我的要求,例如:

var res = str.match(/svg/ig);
var res = str.search("svg");
var res = str.indexOf( "svg" )

2 个答案:

答案 0 :(得分:2)

使用正则表达式直截了当。字符串.match方法采用正则表达式并返回:

  • null如果没有匹配。
  • 否则为数组,其中第一个元素是整个匹配的字符串,其余元素各自为捕获组(如果有)。

所以对于这种情况,你只需要整个匹配,所以只需要拿第一个项目应该没问题。下面的示例正则表达式只查找以.svg结尾的任何非空白字符串。您可能希望扩大或收紧它以满足您的确切用例。

src = 'The expression $ a{\color{blue}{x}}^2 + b{\color{blue}{x}} + c$ is said to be quadratic when TAtrimg001a.svg is \neq 0$'

function findFileName(str, ext) {
    const match = str.match(new RegExp(`\\w+\\.${ext}`));
    return match && match[0]
}

console.log(findFileName(src, "svg"))

次要注意:将字符串传递给RegExp构造函数时,反斜杠必须加倍,因为第一个反斜杠会将第二个反斜杠作为字符串的一部分转义。

答案 1 :(得分:0)

在ES6中,您可以执行类似const result = str.endsWith(".svg") ? str : null;的操作,该操作将存储在result变量的完整文件名中(如果它以“.svg”结尾,换句话说,有svg格式),或null(如果没有):

function checkIsFileOfType(str, fileType) {
  return str.endsWith("." + fileType) ? str : null;
}

console.log(checkIsFileOfType("TAtrimg001a.svD", "svg"));
console.log(checkIsFileOfType("TAtrimg001a.svg", "svg"));