簡體   English   中英

找到模式並動態構建正則表達式以匹配字符串

[英]find the pattern and dynamically build regex to match the string

如果模式中存在星號*,則表示長度為3的相同字符的序列,除非其后接{N},該序列表示應在序列中出現多少個字符,其中N至少為1。我的目標是確定第二個字符串是否與輸入中第一個字符串的模式完全匹配。 我在建立Regex模式時遇到問題

*{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}'/ queryStrSubStr.charAt(0) patternCount /'queryStrSubStr.charAt(0){patternCount}'/ ,但是JavaScript不會將這些字符串解釋為文字中的變量。

以下示例演示了如何使用變量構造正則表達式模式,以及如何將小提琴中的html輸入並入,以便可以測試各種模式。 代碼注釋說明了代碼的工作方式。

 $('.btn').click(function() { let 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) ? true : false; // return true if text matches pattern or false if not } else { // if input string does not start with * return 'No pattern'; } } 
 <input type="text" class="enter_pattern" /> <button type="submit" class="btn">Click</button> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

/*
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
*/

首先,您需要使用正則表達式來計算模式:

/\*\{(\d+)\}\*/

它與一個星號,一個左方括號,一個或多個數字匹配,並以一個右方括號和一個星結尾。

如何使用:

var text = 'mmRRR';
var char = text.charAt(0);
var pattern = '*{2}*';
var counter = /\*\{(\d+)\}\*/.exec(pattern)[1] || '3';
var regex = new RegeExp('^' + char + '\{' + counter + '}$');
var result = text.match(regex);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM