![](/img/trans.png)
[英]Javascript regex to find a pattern in a string, excluding a possible preceding word match
[英]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.