2017-01-16 72 views
0
var str = "Hello World +1 new test Good Morning"; 
var subStr = "+1 new test"; 

我希望代码片段仅在字符串str中找到整个短语(即“+1 new test”)时才返回true。我已经尝试过regEx和匹配,搜索,测试选项。但是,没有人为我工作。它显示错误的'+'。如何使用javascript在字符串中查找确切的子字符串

下面是我使用的是什么 -

var HVal = "Hello World +1 Good" 
    var HValNew = HVal.toString().toUpperCase(); 
    var probStr = "Hello World"; 
    var test = probStr.toUpperCase(); 
    var re = new RegExp('\\b'+test+'\\b'); 
    re.test(HValNew); 

这工作时probStr是包含字母数字字符的字符串,但是当它有特殊字符如失败“+”,“?”

我发现我的答案词组匹配

 var str = "Hello World +1 new test Good Morning".toString().toUpperCase(); 
     var subStr = "+1 new test".toString().toUpperCase(); 
     escapeSpecialChars = function(string) {return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, 'x')}; 
     var probStr = escapeSpecialChars(subStr); 
     var strNew = escapeSpecialChars(str); 
     var re = new RegExp("\\b"+probStr+"\\b"); 
     re.test(strNew); 

这回真的当SUBSTR =“+1新的测试”和假当SUBSTR =“” + 1新TE”(即在部分短语的情况下, )

+1

'str.indexOf(SUBSTR)> -1' – Satpal

+0

'+'在正则表达式有特殊的意义,你需要逃避使用' \ +' – Viney

+0

我只是建议浏览一下['String']的文档(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String),并且学习这些方法,这将帮助你解决这个问题,以及将来会遇到的更多问题。 – 2017-01-16 06:26:21

回答

1

使用includes()功能ES6,并indexOf()ES5

includes - 将返回true如果subStrstr

indexOf - 将返回-1如果没有找到匹配,并且如果subStr被发现,将返回index,从哪里开始subStr

例子

var str = "Hello World +1 new test Good Morning"; 
 
var subStr = "+1 new test"; 
 

 
console.log(str.includes(subStr)); // ES6 
 

 
console.log(str.indexOf(subStr) !== -1); // ES5

+0

@Rajesh当然是的 –

+0

这不是一个重复的问题@Rajesh。我的问题是匹配确切的短语。 indexOf,contains,search等没有回答我的问题 – aks

+0

@aks **字符串中的确切子字符串**这是什么意思呢?另外代码共享也指向它。如果您认为它不重复,请分享正确的案件和不正确的案件。这将澄清你的要求。 – Rajesh

0

你不必在这里使用regex

str.indexOf(subStr) >=0 

如果子发现

+0

这似乎是一个非常基本的问题。你不应该把它标记为重复吗? – Rajesh

+0

@Rajesh,是的,你是对的 –

+0

var str =“Hello World”; var subStr =“Hell”; 然后,str.indexOf(subStr)返回0; if var subStr =“Hello”;那么太str.indexOf(subStr)返回0. – aks

2

这将返回true,您可以使用includes

var str = "Hello World +1 new test Good Morning"; 
 
var subStr = "+1 new test"; 
 

 
console.log(str.includes(subStr));  // ECMAScript 6 
 

 
console.log(str.includes("anything")); // ECMAScript 6

+1

这似乎是一个非常基本的问题。你不应该把它标记为重复吗? – Rajesh

+0

@Rajesh肯定:) –

1

+是一个正则表达式令牌,这意味着匹配前面的一个或多个令牌。

你需要逃避它使正则表达式引擎把它从字面上:

\+1 new test 

虽然如其他人所说的,你应该看看字符串操作,而不是正则表达式在这种情况下。

+0

这似乎是一个非常基本的问题。你不应该把它标记为重复吗? – Rajesh

+0

谢谢heemayl。 – aks

0

由于'+'符号是有效的正则表达式,因此我们需要使用\“\”来将其转义。这是一个工作示例。

var str = "Hello World +1 new test Good Morning"; 
 
var subStr = "\+1 new test" 
 
var bol = str.indexOf(subStr) > -1; 
 
console.log(bol);

+0

请添加说明。仅仅放置工作代码是不够的。 – Rajesh

0

的包括()方法确定的字符串是否包含指定字符串的字符。 如果字符串包含字符,则此方法返回true,否则返回false。 注意:includes()方法区分大小写。

例子:

var str = "Hello +1 world, welcome to the universe."; 
var subStr = str.includes("+1 world"); 

哪里SUBSTR等于真正

相关问题