gpt4 book ai didi

javascript - 找到模式并动态构建正则表达式来匹配字符串

转载 作者:行者123 更新时间:2023-12-03 00:45:31 27 4
gpt4 key购买 nike

如果模式中存在星号 *,则表示长度为 3 的相同字符的序列,除非它后面跟着 {N},它表示序列中应出现多少个字符,其中 N 至少为 1。我的目标是确定第二个字符串是否与输入中第一个字符串的模式完全匹配。我在构建正则表达式模式时遇到问题

*{2}* mmRRR should return TRUE
*{2}* mRRR should return FALSE

https://jsfiddle.net/82smw9zx/

示例代码::

pattern1 = /'queryStrSubStr.charAt(0){patternCount}'/;
var patternMatch = new RegExp(pattern1);
if(queryStrSubStr.match(patternMatch)) {
result = true;
} else result = false;

最佳答案

您需要使用 new RegExp() 来使用变量构建正则表达式模式(而不是尝试将变量直接包含在正则表达式文字中)。

您尝试在正则表达式文字中包含变量 queryStrSubStr.charAt(0)patternCount,例如:/'queryStrSubStr.charAt(0){ patternCount}'/,但 JavaScript 不会将这些字符串解释为文字内的变量。

以下示例演示了如何使用变量构建正则表达式模式以及合并来自 fiddle 的 html 输入,以便您可以测试各种模式。代码注释解释了代码的工作原理。

$('.btn').click(() => {
const result = wildcards($('.enter_pattern').val());
console.log(result);
});

const wildcards = (s) => {
if (s.startsWith('*')) { // if input string starts with *
let pattern;
let [count, text] = s.split(' '); // split input string into count and text
count = count.match(/\{\d+\}/); // match count pattern like {n}
if (count) { // if there is a count
pattern = new RegExp(text.charAt(0) + count); // regex: first character + matched count pattern
} else { // if there is no count
pattern = new RegExp(text.charAt(0) + '{3}'); // regex: first character + default pattern {3}
}

return !!s.match(pattern); // return true if text matches pattern or false if not

} else { // if input string does not start with *
return 'No pattern';
}
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="enter_pattern" />
<button type="submit" class="btn">Click</button>

/*
Example test output:

Input: *{2}* mmRRR
Log: true

Input: *{2}* mRRR
Log: false

Input: * mmmRRR
Log: true

Input: * mmRRR
Log: false

Input: mmRRR
Log: No pattern
*/

关于javascript - 找到模式并动态构建正则表达式来匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53264463/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com