需要特定的 Javascript 匹配正则表达式

发布于 2024-12-09 05:11:35 字数 259 浏览 0 评论 0原文

我目前有以下内容:

var sText = 'I like stackoverflow';

if ( $(this).text().match( eval("/" + sText + "/ig") ) ) {

如您所见,这与整个字符串匹配。

我需要匹配单独包含所有单词的不区分大小写的文本。所以它会寻找“I”、“like”和“stackoverflow”。它必须包含全部 3 个词。

非常感谢您的帮助。

I currently have the following:

var sText = 'I like stackoverflow';

if ( $(this).text().match( eval("/" + sText + "/ig") ) ) {

As you can see, this matches the entire string.

I need to match case insensitive text that contains all the words individually. So it will look for "I", "like" and "stackoverflow". It must have all 3 words.

Much appreciate the help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

面犯桃花 2024-12-16 05:11:35

如果您确实需要通过匹配来执行此操作,则可以使用多个正向先行模式。例如,要以任意顺序匹配 abc

> p = /(?=.*a)(?=.*b)(?=.*c)/i

> 'abc'.match(p)
[""]

> 'cba'.match(p)
[""]

> 'ac'.match(p)
null

If you really need to do this with a match, you can use multiple positive lookahead patterns. For example, to match a, b, and c, in any order:

> p = /(?=.*a)(?=.*b)(?=.*c)/i

> 'abc'.match(p)
[""]

> 'cba'.match(p)
[""]

> 'ac'.match(p)
null
一曲琵琶半遮面シ 2024-12-16 05:11:35

.indexOf 可以完成这项工作时,为什么还要使用正则表达式呢?

var str = $(this).text().toLowerCase();
if (str.indexOf('i')>=0 && str.indexOf('like')>=0 && str.indexOf('stackoverflow')>=0) {  
    // ...
}

(请注意,在这种情况下,“i”搜索被浪费了,因为它包含在“like”中,但我假设您的实际代码正在搜索更普通的文本。)

可能的相关问题:JavaScript:不区分大小写的搜索

Why use regular expressions when .indexOf will do the job?

var str = $(this).text().toLowerCase();
if (str.indexOf('i')>=0 && str.indexOf('like')>=0 && str.indexOf('stackoverflow')>=0) {  
    // ...
}

(Mind you, in this case the "i" search is wasted since it's contained in "like", but I assume your actual code is searching for more ordinary text.)

Possible related question: JavaScript: case-insensitive search

小霸王臭丫头 2024-12-16 05:11:35

你可以先分割然后循环——

var sText = 'I like stackoverflow';
var cText = 'stackoverflow like I';
var arr = sText.split(' ');
var match = true;

for (i=0;i<arr.length;i++) {
  if (!cText.match(eval("/" + arr[i] + "/ig"))) match= false;
}

alert(match);

如果你要比较很多单词,你需要记住效率。

You could just split then loop -

var sText = 'I like stackoverflow';
var cText = 'stackoverflow like I';
var arr = sText.split(' ');
var match = true;

for (i=0;i<arr.length;i++) {
  if (!cText.match(eval("/" + arr[i] + "/ig"))) match= false;
}

alert(match);

You'd need to keep efficiency in mind if you were comparing lots of words though.

烏雲後面有陽光 2024-12-16 05:11:35

我认为这就是您要寻找的 - 关键是单词边界。

    var text = "text to match"

    var stringToLookFor = "I like stackoverflow";
    var words = stringToLookFor.split(" ");
    var match=true;
    $.each(words, function(index, word) {
        if(!text.match(eval("/\\b" + word + "\\b/i"))) {
            match=false;
            return false;
        }
    });

JSFiddle 示例。

I think this is what you're looking for - the key is the word boundaries.

    var text = "text to match"

    var stringToLookFor = "I like stackoverflow";
    var words = stringToLookFor.split(" ");
    var match=true;
    $.each(words, function(index, word) {
        if(!text.match(eval("/\\b" + word + "\\b/i"))) {
            match=false;
            return false;
        }
    });

JSFiddle example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文