如果部分匹配,则无法检索完整字符串。
示例:
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" )
答案 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"));